MySQL数据文件不会缩小

时间:2010-04-15 14:52:54

标签: mysql

我的MySQL数据库的ibdata1文件随着时间的推移增长到大约32GB。最近我从我的数据库中删除了大约10GB的数据(并重新启动了mysql以获得良好的测量结果),但该文件不会缩小。有没有办法减少这个文件的大小

4 个答案:

答案 0 :(得分:11)

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

尽管付出了很多努力,但您可以做的是通过设置为每个表创建一个表空间

innodb_file_per_table

关于这一点的很长一部分是,您需要从mysql服务器导出所有数据(设置新服务器会更容易),然后重新导入数据。您将找到许多名为tablename.ibd的文件,而不是一个保存每个表的数据的单个ibdata1文件,它只保存一个表的数据。


然后:

当您从表中删除大量数据时,可以让mysql通过发出

重新创建数据文件
alter table <tablename> engine=myisam;

切换到MyIsam(并删除此表的InnoDB数据文件)然后

alter table <tablename> engine=innodb;

重新创建表格。

答案 1 :(得分:4)

除非您设置innodb_file_per_table,否则ibdata1会保留所有InnoDB表加上撤消。

此文件永远不会缩小。

为了缩小它,你应该(风险自负):

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

如果你设置innodb_file_per_table,你仍然必须这样做以回收空间,但在这种情况下,你将能够在每个表的基础上执行此操作,而不会影响其他表。< / p>

请注意,撤消仍保留在ibdata中,即使设置了innodb_file_per_table也是如此。

答案 2 :(得分:1)

答案 3 :(得分:1)

运行optimize table your_db.your_table; sql请求 或使用mysql workbench migration wizard,它将创建缩小大小的数据库副本