MySQL数据文件无法缩小

8

我的MySQL数据库的ibdata1文件随着时间的推移增长到了约32GB。最近,我从我的数据库中删除了约10GB的数据(并为了保险起见重新启动了mysql),但是该文件不会缩小。有没有办法减小这个文件的大小?

4个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
11

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

您可以做的事情是为每个表创建一个表空间,方法是设置

innodb_file_per_table
这段话的意思是,为了删除MySQL服务器中的数据,需要导出所有数据(建立新服务器会更容易),然后重新导入数据。 在一个单独的ibdata1文件中保存每个表的数据的代替方案是在很多名为“tablename.ibd”的文件中分别保存单个表的数据。 之后,如果你要从表中删除大量数据,可以通过下达命令让MySQL重新创建数据文件。
alter table <tablename> engine=myisam;

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

alter table <tablename> engine=innodb;
重新创建表格。

如果您有外键约束,则备用方案将无法正常工作。 - Archimedes Trajano

4
除非您设置了innodb_file_per_table,否则ibdata1将保存所有InnoDB表和撤销操作。 该文件永远不会缩小。 要缩小它,您应该(自行承担风险): - 备份并删除所有数据库中的InnoDB表 - 手动删除文件 - 重新初始化InnoDB存储(通过重启mysqld) - 从备份中恢复表格。 如果您设置了innodb_file_per_table,则仍然需要执行此操作以回收空间,但在这种情况下,您将能够基于每个表格进行此操作,而不影响其他表格。 请注意,即使设置了innodb_file_per_table,撤销操作仍然保存在ibdata中。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,