MySQL表空间回收

环境介绍:

OS CentOS 6.X

MySQL:5.5.40

查看数据库对象SQL:http://blog.csdn.net/jacson_bai/article/details/44017015
情况1:删除表里面的数据,表对应的物理空间未释放
产生原因:类比Oracle的高水位线产生原理
解决办法:
方法1:

执行  OPTIMIZE TABLE 表名; 

mysql>use mysql;

mysql>optimize table test.t1;

注意:
1.OPTIMIZE TABLE只对MyISAM, BDB和InnoDB表起作用;
2.OPTIMIZE TABLE会产生锁,推荐在业务低峰时执行;
3.对于DDL频繁的表,定期执行OPTIMIZE TABLE
方法2:
写一SQL,创建新表,删除旧表,新表重命名;
mysql>old_tables create new_table;
mysql>truncate table old_tables;

mysql>rename new_tables to old_tables.

方法3:执行ALTER TABLE t1 ENGINE = InnoDB;

原理就是:重建表!!!大笑

参考链接:http://dev.mysql.com/doc/refman/5.5/en/alter-table.html

关键描述:


情况2:删除对应的表和数据,但是ibdata空间并未释放
形成原因:
临时解决办法:
1.使用mysqldump备份数据库,关闭mysql,
2.手动删除ibdata,ib_logfile文件
3.恢复数据库

永久解决办法:

参考链接:http://blog.csdn.net/jacson_bai/article/details/45919403

1.使用独立表空间
2.限制ibdata单个文件的大小
Logo

更多推荐