最近遇到了一个坑,MySQL数据库服务器硬盘容量告警,而且因为非技术原因,还不能追加硬盘。
通过监控发现,磁盘IO一直100%。直接影响就是系统处理时间越来越长,接口响应耗时也越来越多。
经过分析,发现mysql业务数据库里有好几张大表,而且这几张大表行数都在5000万以上,文件大小都在100G和150G之间。
因为这些表都是备份表,第一反应就是找DBA直接清理掉这些表。潜意识里以为drop table 和 truncate table效率很高,都会快速完成,但事实上不是。但意外的是,在执行drop table时,直接导致数据库挂起了,而且还发生了主从切换。
第一次尝试失败。
第一次失败反应出来的问题是,如果数据文件过大,drop table操作也得慎用。
那我们可以在drop table之前,想办法把数据文件逻辑清空。比如Linux硬连接的方式,具体步骤如下(假如目标表名是test):
ln test.ibd test.ibd.hdlk
drop table test;
此时,磁盘上真实的数据其实没删除,但数据库里的表,已经删除了。
rm test.ibd.hdlk
到此,数据就能快速清理成功了。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务