加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 钦州站长网 (https://www.0777zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL小技巧:删除大表数据时,drop table执行不下去怎么办

发布时间:2023-01-02 12:46:21 所属栏目:MySql教程 来源:
导读:  背景

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

  通过监控发现,磁盘IO一直100%。直接影响就是系统处理时间越来越长,接口响应耗时也越来越多。
  背景
 
  最近遇到了一个坑,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目录MySQL 删除数据表,创建数据文件 test.ibd的硬链接
 
  ln test.ibd test.ibd.hdlk
 
  进入数据库命令行删除目标表。
 
  drop table test;
 
  此时,磁盘上真实的数据其实没删除,但数据库里的表,已经删除了。
 
  再回到数据库data目录清除数据文件。
 
  rm test.ibd.hdlk
 
  到此,数据就能快速清理成功了。
 

(编辑:PHP编程网 - 钦州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!