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)
分类:
MySQL
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示