我的MySQL数据库的ibdata1文件随着时间的推移增长到大约32GB。最近我从我的数据库中删除了大约10GB的数据(并重新启动了mysql以获得良好的测量结果),但该文件不会缩小。有没有办法减少这个文件的大小
答案 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,它将创建缩小大小的数据库副本