ibdata1 文件空间的释放

ibdata1 是 InnoDB 引擎产生的数据文件,他有一个特点就是当我们把数据表中的数据删除之后,他的文件大小是不会缩小回去,占据的磁盘空间是不释放的,查了一下资料,说是这部分的磁盘空间在我们删除数据行之后,依然是由 InnoDB 的引擎管理的,这样做的好处就是下次需要再次 insert 数据的时候,他可以不用向操作系统申请,这个设计让人想起了 PHP 的脚本引擎在内存管理上的策略,也是类似的,当我们需要向 PHP 引擎要一块内存的时候,他代我们向操作系统要,但是我们用完之后释放这块内存的时候,PHP 引擎却不会立刻把这片内存释放掉,而是继续管理,这样的好处也是说在下次需要使用的时候可以不用频繁的向操作系统申请。

应该说这种策略的出发点是好的,但是,我们的磁盘空间是有限的啊,没办法,只能找些奇门异术来释放磁盘空间了,找到这里,http://holy2010.blog.51cto.com…

错误方法一:导入数据库后,只是数据库test增大了而已,ibdata1还是默认的11M
1、只删除ibdata1或则ib_logfile0和ib_logfile1
2、重启Mysql服务器 service mysqld restart
3、创建数据库test,导入备份的数据
以上的的结果虽然数据没有丢失,但不应用这样的做法
正确方法:ibdata1、ib_logfile同时删除,ibdata才能正常储存数据,重启mysql服务
错误方法二:不对数据库备份,直接就为了瘦身ibdata1而删除ibdata1就会导致整个数据丢失
正确方法:停止mysql服务,再备份数据库,再删除ibdata1和ib_logfile,重启mysql服务,再导入备份

我的做法是把数据引擎从 InnoDB 换成 MyISAM,然后删除了他这些文件,总算腾出点位置了

题外话,使用这个命令

reset master;

可以清除日志文件,也能腾出可观的磁盘空间

Leave a Reply

Your email address will not be published. Required fields are marked *