【mysql】如何回收delete之后mysql所占用的磁盘空间

【mysql】如何回收delete之后mysql所占用的磁盘空间

时间:2015-09-10 03:09:23      作者:vaster      标签: mysql      分类: mysql

我们都知道,当使用 innodb_file_per_table=OFF的时候,数据文件都会存储在ibdata文件中,当我们从表中delete数据之后,除非使用dump/reload的方法,没有其他的办法来释放被占用的磁盘空间,数据只能一直增长。当使用了Innodb_file_per_table=ON的时候,当你delete数据之后,数据删除了,但是磁盘的空间并不会释放,除了dump/reload之外,还有如下的方法来回收这部分的空间。请参考下面的连接。

http://www.mysqlperformanceblog.com/2013/09/25/how-to-reclaim-space-in-innodb-when-innodb_file_per_table-is-on/

注:之前使用optimize回收空间,但是在执行的过程中会锁表,因此会影响正在跑的业务,如下的连接里面介绍了percona toolkit的一个回收磁盘空间的命令,不会锁表

主要的原理是:创建一个triggers,创建一个临时表,将原来表中数据复制到临时表中,触发器的作用是保证执行复制的过程中,源表和临时表中同时插入数据。之后删除源表,重命名一下临时表即可。这个过程中应该保证,磁盘空间能够容下源表的两倍的数据大小

命令:Pt-online-schema-change --alter "ENGINE=InnoDB" D=DatabaseName,t=TableName  --execute

时间:2015-09-10 03:09:23      作者:vaster      标签: mysql      分类: mysql
  • 分享到:
  • 微博
  • QQ空间
  • 腾讯微博
  • 微信

Copyright © 2015 Gitblog | Proudly powered by Gitblog.