我有一个使用InnoDB存储引擎的MySQL表;它包含大约2M数据行。当我从表中删除数据行时,它没有释放分配的磁盘空间。运行该optimize table命令后,ibdata1文件的大小也没有减小。有什么办法可以从MySQL回收磁盘空间?我处境很糟;该应用程序在大约50个不同的位置运行,现在几乎所有位置都出现磁盘空间不足的问题。
3 回答
达令说
TA贡献1821条经验 获得超6个赞
MySQL不会减小ibdata1的大小。曾经 即使您optimize table用来从已删除的记录中释放已使用的空间,它也会在以后重用。
一种替代方法是配置服务器以使用innodb_file_per_table,但这将需要备份,删除数据库并还原。积极的一面是该表的.ibd文件在optimize table。之后被减少。
Cats萌萌
TA贡献1805条经验 获得超9个赞
我自己也遇到了同样的问题。
什么情况是,即使你删除数据库,InnoDB的仍不会释放磁盘空间。我必须导出,停止mysql,手动删除文件,启动mysql,创建数据库和用户,然后导入。谢天谢地,我只有200MB的行,但它保留了250GB的innodb文件。
设计失败。
蓝山帝景
TA贡献1843条经验 获得超7个赞
如果您不使用innodb_file_per_table,则可以回收磁盘空间,但是非常繁琐,并且需要大量的停机时间。
“操作方法”非常深入-但我在下面粘贴了相关部分。
确保在转储中还保留架构的副本。
当前,您不能从系统表空间中删除数据文件。要减小系统表空间大小,请使用以下过程:
使用mysqldump转储所有InnoDB表。
停止服务器。
除去所有现有的表空间文件,包括ibdata和ib_log文件。如果要保留信息的备份副本,则在删除MySQL安装中的文件之前,将所有ib *文件复制到另一个位置。
删除InnoDB表的所有.frm文件。
配置一个新的表空间。
重新启动服务器。
导入转储文件。
添加回答
举报
0/150
提交
取消