mysql删除表数据进度0%(删除大表数据时)

发布日期:2024-12-22 04:48:16     作者:爱的奢望     手机:https://m.xinb2b.cn/know/cny315291.html     违规举报

最近遇到了一个坑,MySQL数据库服务器硬盘容量告警,而且因为非技术原因,还不能追加硬盘,我来为大家科普一下关于mysql删除表数据进度0%?以下内容希望对你有帮助!


mysql删除表数据进度0%

背景

最近遇到了一个坑,MySQL数据库服务器硬盘容量告警,而且因为非技术原因,还不能追加硬盘。

通过监控发现,磁盘IO一直100%。直接影响就是系统处理时间越来越长,接口响应耗时也越来越多。

drop or truncate table 失败

经过分析,发现mysql业务数据库里有好几张大表,而且这几张大表行数都在5000万以上,文件大小都在100G和150G之间。

因为这些表都是备份表,第一反应就是找DBA直接清理掉这些表。潜意识里以为drop table 和 truncate table效率很高,都会快速完成,但事实上不是。但意外的是,在执行drop table时,直接导致数据库挂起了,而且还发生了主从切换。

第一次尝试失败。

通过Linux硬链接删除

第一次失败反应出来的问题是,如果数据文件过大,drop table操作也得慎用。

那我们可以在drop table之前,想办法把数据文件逻辑清空。比如Linux硬连接的方式,具体步骤如下(假如目标表名是test):

进入数据库data目录,创建数据文件 test.ibd的硬链接

ln test.ibd test.ibd.hdlk

进入数据库命令行删除目标表。

drop table test;

此时,磁盘上真实的数据其实没删除,但数据库里的表,已经删除了。

再回到数据库data目录清除数据文件。

rm test.ibd.hdlk

到此,数据就能快速清理成功了。

 
 
本文地址:https://xinb2b.cn/know/cny315291.html,转载请注明出处。

推荐图文
推荐经验知识
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  违规举报  |  蜀ICP备18010318号-4  |  百度地图  | 
Processed in 0.174 second(s), 1 queries, Memory 0.57 M