我已经删除了几 GB 的 MySQL 数据,但还没有返回到文件系统。我的磁盘快满了,我该怎么办?所有数据都在 ibdata1 文件中,因为它是 InnoDB。
我试过 mysqloptimize -A -o 但没有帮助。
编辑:服务器版本:5.0.51a-24+lenny2+spu1 (Debian)
我已经删除了几 GB 的 MySQL 数据,但还没有返回到文件系统。我的磁盘快满了,我该怎么办?所有数据都在 ibdata1 文件中,因为它是 InnoDB。
我试过 mysqloptimize -A -o 但没有帮助。
编辑:服务器版本:5.0.51a-24+lenny2+spu1 (Debian)
因为你似乎有一个整体的 innodb 文件 - 你不能缩小它。
如果您负担得起停机时间,请执行以下操作:
将来,您将能够备份和删除单个表并在之后恢复它 - 这要归功于 file-per-table 选项。
删除数据后(步骤 6),您需要使用“mysqld --skip-grant-tables”启动,否则 mysqld 将无法启动,因为没有授权表。
如果您已
innodb_file_per_table
启用,请按照以下说明进行操作。但是,如果这尚未使用,则需要完全重新创建您的模式以释放空间。使用 InnoDB,您需要对
alter
表。较新版本的 MySQL 也执行相同的功能optimize table
。小心大表,因为这些命令会锁定表。
当您将数据放入允许扩展的表中时,它的大小会增加。当您从表中删除数据时,该大小保持不变。
您可以做几件事:
1)像华纳建议的那样改变桌子,以减少尺寸。
2)优化表(如果支持)。这也应该减小尺寸。
3)备份表,删除表,然后将数据重新导入新表。
在任何情况下,您都应该先备份数据。如果您定期删除数据,您应该运行一个 cronjob 来定期进行优化或更改。无论您运行的是 MySQL、MSSQL 还是 Oracle,这都是正确的。它们都需要维护。
@Warner:嗯,主要是偏好。我会先说我不会将 MySQL 用于任何需要性能的因素,如果我这样做了,我会优化,然后更改表以使其更大,这样就不会造成扩展损失。
对于我的需求,它 100% 是关于自动化和易于维护的。运行优化使一切保持整洁。