逍遥谷

记录日常的点点滴滴

0%

MySQL删除大表

记一次处理生产同事使用MySQL8存储过程进行数据计算,各种笛卡尔积产生了大量中间数据,一个单表数据就超过了180GB,因为这张表的处理超时,事务死锁,导致整个依赖这个中间数据表的下游任务均受影响,生产上紧急处理这张表带来的问题,挑战删除这张大表。

建立硬链接

找到MySQL的数据文件中这张表对应的数据文件,假设表名是test,数据文件对应的是test.frm和test.ibd,通过查看test.ibd文件大小已经超过180GB,这就是这张表无法直接drop的原因。

在这个文件夹下,为test.frm和test.ibd分别建立硬链接

1
2
ln test.frm test.frm.h
ln test.ibd test.ibd.h

成功建立两个文件的硬链接

删除表

在MySQL中使用DROP 命令删除表

1
DROP TABLE test;

这时候删除非常快,立马就能删除完成

删除硬链接文件

删除硬链接文件,test.frm.h和test.ibd.h

1
2
rm -rf test.frm.h
rm -rf test.ibd.h

这样就完成了大表的删除