mysql删除大表更快的drop table办法
参考资料:
https://blog.csdn.net/anzhen0429/article/details/76284320
利用硬连接和truncate下降drop table对线上环境的影响
在DROP TABLE的时候,全部进程无论是DDL仍是DML都被HANG起;直到DROP结束才继续执行;这是由于INNODB会维护一个全局独占锁(在table cache上面),mysql
直到DROP TABLE完成才释放。在咱们经常使用的ext3,ext4,ntfs文件系统,要删除一个大文件(几十G,甚至几百G)仍是须要点时间的。sql
下面咱们介绍一个快速DROP table 的方法; 无论多大的表,INNODB 均可以很快返回,表删除完成;
架构
[root@my1-222 ~]# ll /data/mysql/mysql_3306/data/db222/t2* -th -rw-r-----. 1 mysql mysql 2.0G May 29 22:39 /data/mysql/mysql_3306/data/db222/t2.ibd -rw-r-----. 1 mysql mysql 8.5K May 29 21:51 /data/mysql/mysql_3306/data/db222/t2.frm [root@my1-222 ~]#
直接使用DROP TABLE来完成删表动做,那么这条语句要执行很长时间。此时即可以经过在该表对应的数据文件上设置硬连接来进行删除。测试
一、若是是主从架构,请在全部机器上建立硬连接
建立方法都很简单:
软连接(符号连接) ln -s source target
硬连接 (实体连接)ln source target
spa
ln /data/mysql/mysql_3306/data/db222/t2.ibd /data/mysql/mysql_3306/data/db222/t2.ibd.hdlk
# 进入mysql,执行删除表 drop table t2;
二、而后去操做系统中删除真正的大物理文件
for i in `seq 50 -1 1 ` ;do sleep 2;truncate -s ${i}G /data/mysql/mysql_3306/data/db222/t2.ibd.hdlk;done rm -rf /data/mysql/mysql_3306/data/db222/t_user.ibd.hdlk
从2G开始,每次缩减1M,停2秒,继续直到文件只剩1G,最后使用rm命令删除剩余的部分。
(文件越大,越能体现出来,这里是测试,文件只有2G,能够将其修改成M)操作系统