我已经使用InnoDB存储引擎一个MySQL表; 它包含了2M的数据行。 当我从表中删除数据行,它并没有释放分配的磁盘空间。 也没有在ibdata1中文件的大小运行后减少optimize table
命令。
有没有办法从MySQL回收磁盘空间?
我在一个糟糕的情况; 这个应用程序在约50不同的位置上运行,现在的磁盘空间不足的问题出现在几乎所有的人。
我已经使用InnoDB存储引擎一个MySQL表; 它包含了2M的数据行。 当我从表中删除数据行,它并没有释放分配的磁盘空间。 也没有在ibdata1中文件的大小运行后减少optimize table
命令。
有没有办法从MySQL回收磁盘空间?
我在一个糟糕的情况; 这个应用程序在约50不同的位置上运行,现在的磁盘空间不足的问题出现在几乎所有的人。
MySQL不降低ibdata1中的大小。 永远。 即使您使用optimize table
来释放从已删除的记录使用的空间,这将在以后重新使用它。
另一种方法是将服务器配置为使用innodb_file_per_table
,但这将需要备份,删除数据库和恢复。 正侧是,表中的的.ibd文件是一个后减少optimize table
。
刚刚有同样的问题我自己。
什么情况是,即使你删除数据库,InnoDB的仍不会释放磁盘空间。 我不得不出口,阻止MySQL中,手动删除文件,启动mysql,创建数据库和用户,然后导入。 感谢上帝,我只有行的200MB的价值,但它不遗余力的InnoDB文件的250GB。
设计失败。
如果你不使用innodb_file_per_table ,回收磁盘空间是可能的,但相当繁琐,需要停机的显著量。
该如何为深入漂亮-但我粘贴下面的相关部分。
此外,请务必保留您的架构的副本转储。
目前,您无法从系统中删除表空间的数据文件。 为了减少系统表空间的大小,使用此过程:
使用mysqldump转储所有InnoDB表。
停止服务器。
删除所有现有的表空间文件,包括ibdata和ib_log文件。 如果你想保留的信息进行备份,然后将所有IB *文件复制到其他位置,MySQL安装在删除文件之前。
删除所有.FRM文件InnoDB表。
配置新的表空间。
重新启动服务器。
导入转储文件。
基于范围,基于价值的分区和刚落/截断分区回收空间,这将释放由储存在特定分区整个数据使用的空间 - 其他解决空间回收的问题,创建表中的多个分区的方式。
会有在表模式需要一些改变,当你介绍分区为你喜欢的表 - 独特的键,索引,包括分区列等。
有几种方法可以删除从表中的数据为MySQL Inodb发动机后回收磁盘空间
如果不从一开始就使用innodb_file_per_table,倾倒所有数据,删除所有文件,重新创建数据库,并导入数据又是唯一的出路(检查上面FlipMcF的答案)
如果你正在使用innodb_file_per_table,您可以尝试