mysql大表的数据清理
前言
mysql的表日积月累也会出现过千万的大表,有些历史数据可以定期归档清理的,保留最近的数据即可。但是delete table_name where id = ‘’;这种方式只是逻辑上的删除,不会释放表空间和索引的。因此需要在历史数据归档后做表分析才行
1、大表归档大量数据
先远程备份,可以开发成shell脚本,设置crontab定期备份
|
|
可以根据自己的业务策略进行历史数据清理
|
|
2、表分析
OPTIMIZE TABLE $(table_name);
|
|
发现optimize失效,提示不支持 查了下资料,有说innoDB不支持,用alert替代
OPTIMIZE TABLE continues to use ALGORITHM=COPY under the following conditions:
When the old_alter_table system variable is turned ON.
set old_alter_table=on; //alter table 修改表采用 algorithm=copy 方式
When the mysqld --skip-new option is enabled.
例如:
|
|
3、ALTER表
ALTER TABLE ${tableName} ENGINE=INNODB
|
|
4、对比前后表数据的条数
重建表后确实生效了数据释放和索引释放,连表空间的占用也少了很多 重建表后
5、另外一种方式
还可以使用pt-online-schema-change脚本在线DDL,属于percona-toolki运维工具系列
|
|
- 原文作者:Anttu
- 原文链接:https://anTtutu.github.io/post/2021-12-23-mysql_table_clean/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。