如何将删除的数据释放到MySQL中的文件系统

我已经删除了几GB的MySQL数据,但还没有被返回到文件系统。 我的磁盘已经满了,我该怎么做? 因为它是InnoDB,所有的数据都在ibdata1文件中。

我已经尝试了mysqloptimize -A -o但它没有帮助。

编辑:服务器版本:5.0.51a-24 + lenny2 + spu1(Debian)

因为你似乎有单一的innodb文件 – 你不能缩小它。

如果你能负担得起的停机时间做如下:

  1. 停止mysql。
  2. 从mysql数据目录[包括ibdata和innodb日志文件]中获取所有文件/目录的基于文件的备份。
  3. 启动mysql,运行mysqldump -uroot -ppass -A> file.sql
  4. 再次停止mysql
  5. 重新configurationmysql以使用innodb的file-per-table [add to my.cnf innodb_file_per_table]
  6. 用你的数据库删除innodb ibdata / log files /目录
  7. 启动mysql并从#3的备份中恢复数据 – cat file.sql | mysql -uroot -ppass

在未来,您将能够备份和删除单个表,并在之后恢复 – 感谢每个表的文件选项。

如果您启用了innodb_file_per_table ,请按照下面的说明进行操作。 但是,如果这还没有被使用,你的模式将需要被重新创build以释放空间。

有了InnoDB,你需要alter表格。 较新版本的MySQL也可以通过optimize table来执行相同的function。

小心大表,因为这些命令locking表。

当您将数据放入允许展开的表格中时,其大小会增加。 从表中删除数据时,该大小保持不变。

有几件事你可以做:

1)像华纳build议的那样改变桌子,以减小尺寸。

2)优化表(如果支持的话)。 这也应该减小尺寸。

3)备份表格,删除表格,然后将数据重新导入到新表格中。

在任何情况下,您都应该先备份数据。 如果定期删除数据,您应该运行cronjob来定期进行优化或更改。 无论您是运行MySQL,MSSQL还是Oracle,这都是真实的。 他们都需要维护。

@Warner:呃,大部分都是偏好。 我将在前言中说,我不使用MySQL来处理性能是因素的任何事情,如果我这样做,我会优化,然后改变表格,使其更大,所以不会有膨胀惩罚。

对于我的需求,它是100%的自动化和易于维护。 运行优化保持一切整齐。