我已经删除了几GB的MySQL数据,但还没有被返回到文件系统。 我的磁盘已经满了,我该怎么做? 因为它是InnoDB,所有的数据都在ibdata1文件中。
我已经尝试了mysqloptimize -A -o但它没有帮助。
编辑:服务器版本:5.0.51a-24 + lenny2 + spu1(Debian)
因为你似乎有单一的innodb文件 – 你不能缩小它。
如果你能负担得起的停机时间做如下:
在未来,您将能够备份和删除单个表,并在之后恢复 – 感谢每个表的文件选项。
如果您启用了innodb_file_per_table ,请按照下面的说明进行操作。 但是,如果这还没有被使用,你的模式将需要被重新创build以释放空间。
有了InnoDB,你需要alter表格。 较新版本的MySQL也可以通过optimize table来执行相同的function。
小心大表,因为这些命令locking表。
当您将数据放入允许展开的表格中时,其大小会增加。 从表中删除数据时,该大小保持不变。
有几件事你可以做:
1)像华纳build议的那样改变桌子,以减小尺寸。
2)优化表(如果支持的话)。 这也应该减小尺寸。
3)备份表格,删除表格,然后将数据重新导入到新表格中。
在任何情况下,您都应该先备份数据。 如果定期删除数据,您应该运行cronjob来定期进行优化或更改。 无论您是运行MySQL,MSSQL还是Oracle,这都是真实的。 他们都需要维护。
@Warner:呃,大部分都是偏好。 我将在前言中说,我不使用MySQL来处理性能是因素的任何事情,如果我这样做,我会优化,然后改变表格,使其更大,所以不会有膨胀惩罚。
对于我的需求,它是100%的自动化和易于维护。 运行优化保持一切整齐。