drop table mysql_mysql删除大表更快的drop table办法

mysql删除大表更快的drop table办法

参考资料:

https://blog.csdn.net/anzhen0429/article/details/76284320

利用硬链接和truncate降低drop table对线上环境的影响

在DROP TABLE的时候,所有进程不管是DDL还是DML都被HANG起;直到DROP结束才继续执行;这是因为INNODB会维护一个全局独占锁(在table cache上面),

直到DROP TABLE完成才释放。在我们常用的ext3,ext4,ntfs文件系统,要删除一个大文件(几十G,甚至几百G)还是需要点时间的。

下面我们介绍一个快速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来完成删表动作,那么这条语句要执行很长时间。此时便可以通过在该表对应的数据文件上设置硬链接来进行删除。

1、如果是主从架构,请在所有机器上创建硬链接

创建方法都很简单:

软链接(符号链接) ln -s   source  target

硬链接 (实体链接)ln       source  target

ln /data/mysql/mysql_3306/data/db222/t2.ibd /data/mysql/mysql_3306/data/db222/t2.ibd.hdlk

# 进入mysql,执行删除表drop table t2;

2、然后去操作系统中删除真正的大物理文件

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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值