2010-04-15 30 views
8

随着时间的推移,MySQL数据库的ibdata1文件增长到32GB左右。最近,我从我的数据库中删除了大约10GB的数据(并且重新启动了mysql以获得更好的效果),但是文件不会缩小。有什么办法来减少该文件MySQL数据文件不会缩小

回答

11

无论您删除多少数据,InnoDB表空间的文件大小都不会自动降低。

你可以做什么,虽然这是一个很大的努力,是通过设置

innodb_file_per_table 

关于这个长的部分是创建一个表空间的每个表,你需要将所有数据从导出mysql服务器(建立一个新的服务器会更容易),然后重新导入数据。而不是一个包含每个表的数据的ibdata1文件,您会发现很多名为tablename.ibd的文件,这些文件仅为一个表保存数据。


算账:

然后,当您删除大量从表中的数据,可以让MySQL的通过发行

alter table <tablename> engine=myisam; 

切换到MyISAM数据重新创建数据文件(且有这个表的InnoDB数据文件被删除)然后

alter table <tablename> engine=innodb; 

重新创建表。

4

的大小除非你把innodb_file_per_tableibdata1拥有所有InnoDB表加撤消。

该文件永远不会缩小。

要缩小它,你应该(风险自担):

  • 备份和删除所有InnoDB表中所有数据库
  • 删除文件手动
  • 重新初始化InnoDB存储(通过重新启动mysqld)和
  • 从备份恢复表。

如果设置innodb_file_per_table,你还是得这样做是为了回收空间,但在这种情况下,你就可以做到这一点对每个表的基础,而不会影响其他表。

注意,撤消在ibdata仍持有,即使innodb_file_per_table集。