2012-12-19 51 views
6

我看着ibdata文件,它是128 GB。我拿出每张桌子的大小,一张桌子上有5百万的记录,它显示了90 GB。如何清除ibdata1文件以及它如何影响性能?

我截断了该表,因为它不是必需的,我查看了ibdata1的大小。它仍然显示128 GB。然后我拿出每张桌子的大小,然后总和只有35-38 GB。

如何获取我的Db服务器上的90 GB空间。我在红帽Linux服务器上使用mysql和php。

我想 - 如果我们删除任何数据库,它只是删除复制,但分配给它的空间不会被释放,直到我们手动完成。是这样吗。

+1

可复制的http://stackoverflow.com/questions/3456159/how-to-shrink-purge-ibdata1-file-in-mysql。总之一句话:你不能。转储所有数据库,停止服务器,删除ibdata文件,重新启动,重新导入转储。 – RandomSeed

+1

下一次使用['innodb_file_per_table'](http://dev.mysql.com/doc/refman/5.5/en/innodb-multiple-tablespaces.html)选项。放下大桌子将允许你回收空间。 – gertvdijk

+0

强烈建议访问提供的@YaK链接。肯定是重复的,他/她链接的文章有逐步的说明。 – Tass

回答

5

一旦空间被ibdata文件占用,它永远不会消失。 'shink'数据文件的唯一方法是转储您的dbs,全部删除它们,删除ibdata文件,重新启动mysql并重新加载转储。

如果您经常删除整个表格,则可以将innodb配置为每个表格使用一个数据文件。在这种情况下,当您删除表时,可以删除该表特定的ibdata文件。

+0

如果我删除我所有的表并删除数据库并删除ibdatafile,它是否会自动创建,如果我重新加载转储 –

+0

@NaanuManu是的,只要确保您有一个完整的转储。所有innodb数据将在您删除时丢失。 – Ray

相关问题