为了账号安全,请及时绑定邮箱和手机立即绑定

从表中删除数据行后,MySQL InnoDB无法释放磁盘空间

从表中删除数据行后,MySQL InnoDB无法释放磁盘空间

www说 2019-11-07 12:44:22
我有一个使用InnoDB存储引擎的MySQL表;它包含大约2M数据行。当我从表中删除数据行时,它没有释放分配的磁盘空间。运行该optimize table命令后,ibdata1文件的大小也没有减小。有什么办法可以从MySQL回收磁盘空间?我处境很糟;该应用程序在大约50个不同的位置运行,现在几乎所有位置都出现磁盘空间不足的问题。
查看完整描述

3 回答

?
达令说

TA贡献1821条经验 获得超6个赞

MySQL不会减小ibdata1的大小。曾经 即使您optimize table用来从已删除的记录中释放已使用的空间,它也会在以后重用。


一种替代方法是配置服务器以使用innodb_file_per_table,但这将需要备份,删除数据库并还原。积极的一面是该表的.ibd文件在optimize table。之后被减少。


查看完整回答
反对 回复 2019-11-07
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

我自己也遇到了同样的问题。


什么情况是,即使你删除数据库,InnoDB的仍不会释放磁盘空间。我必须导出,停止mysql,手动删除文件,启动mysql,创建数据库和用户,然后导入。谢天谢地,我只有200MB的行,但它保留了250GB的innodb文件。


设计失败。


查看完整回答
反对 回复 2019-11-07
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

如果您不使用innodb_file_per_table,则可以回收磁盘空间,但是非常繁琐,并且需要大量的停机时间。


“操作方法”非常深入-但我在下面粘贴了相关部分。


确保在转储中还保留架构的副本。


当前,您不能从系统表空间中删除数据文件。要减小系统表空间大小,请使用以下过程:


使用mysqldump转储所有InnoDB表。


停止服务器。


除去所有现有的表空间文件,包括ibdata和ib_log文件。如果要保留信息的备份副本,则在删除MySQL安装中的文件之前,将所有ib *文件复制到另一个位置。


删除InnoDB表的所有.frm文件。


配置一个新的表空间。


重新启动服务器。


导入转储文件。


查看完整回答
反对 回复 2019-11-07
  • 3 回答
  • 0 关注
  • 929 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信