Gau*_*rav 4 mysql sql mysqldump
我有一个大约20GB的数据库.我需要删除5个表并删除其他3个表中的几列.
删除5个表,释放3 GB,在其他表中删除列应该释放另外8GB.
如何从MySQL回收此空间.
我已经阅读了转储数据库并将其恢复为解决方案之一,但我不确定它是如何工作的,我甚至不确定这是否仅适用于删除整个数据库或只是部分数据库?
请建议如何解决这个问题.谢谢.
从评论中,听起来你在没有文件每表选项的情况下使用InnoDB.
在这种模式下,通常不能从innodb表空间中回收空间.您唯一的做法是转储整个数据库,打开每个表文件模式,并重新加载它(使用一个完全干净的mysql实例).对于大型数据库,这需要很长时间; mk-parallel-dump和restore工具可能会更快一些,但仍需要一段时间.请务必先在非生产服务器上测试此过程.
编辑:没有 file_per_table 则不适用,马克就在那里。
发生的情况是,一旦 MySQL 占用空间,它就不会归还它。这样,如果您删除 500 行,然后立即插入 500 行,则不必将该空间返还给文件系统,然后再请求返回。这是一种避免文件系统开销的优化,当您删除少量位时它效果很好。
如果删除大量空间,则需要很长时间才能再次使用所有空间,这可能会很烦人。这可以通过两种方式解决:删除表并重新加载内容,或者优化表(我相信这基本上是在内部重新加载表)。
要从表中收回空间,您所要做的就是:
OPTIMIZE TABLE my_big_table;
Run Code Online (Sandbox Code Playgroud)
请注意,这可能需要一段时间,而不是近乎即时的操作。基本上,计划一些停机时间。如果您的桌子只有几场演出,那么时间不应该太长(可能是几分钟)。这还会重建索引并执行一些其他内务处理。
您可以在 MySQL 站点上查看有关优化的更多信息。这是它的建议:
如果您删除了表的大部分内容或者对具有可变长度行的表(具有 VARCHAR、VARBINARY、BLOB 或 TEXT 列的表)进行了许多更改,则应使用 OPTIMIZE TABLE。已删除的行保存在链接列表中,后续的 INSERT 操作将重用旧的行位置。您可以使用 OPTIMIZE TABLE 来回收未使用的空间并对数据文件进行碎片整理。
归档时间: |
|
查看次数: |
15670 次 |
最近记录: |