mysql drop_MySQL如何drop一个上百GB的大表
备注:来自知数堂老师的总结,这里搬到本博客主要是为了备忘。一个无业务的大表,在系统不繁忙的情况下,如何尽可能的占用较少的磁盘IO,并快速的drop掉?建议方案:0. 一定要提前做好备份啊1. rename table xx to xx_1;2. create table xx like xx_1;3. os 层建立硬链接4. drop table xx;5. os 层循环truncate数据文件具
备注:来自知数堂老师的总结,这里搬到本博客主要是为了备忘。
一个无业务的大表,在系统不繁忙的情况下,如何尽可能的占用较少的磁盘IO,并快速的drop掉?
建议方案:
0. 一定要提前做好备份啊
1. rename table xx to xx_1;
2. create table xx like xx_1;
3. os 层建立硬链接
4. drop table xx;
5. os 层循环truncate数据文件
具体例子参考牛人博客:
这里再稍作解释:
1.有个InnoDB表prod_table,先把表重新命名,防止还有应用在使用表
rename table prod_table to example_table;
2.只创建表结构,不含数据
create table prod_table like example_table;
3.对100G的ibd数据文件做个硬链接
#sudo ls -lh /data/mysql/testdb
-rw-rw---- 1 mysql mysql 8.4K Oct 28 13:26 example_table.frm
-rw-rw---- 1 mysql mysql 100G Oct 28 13:26 example_table.ibd
#sudo ln /data/mysql/testdb/example_table.ibd /data/mysql/testdb/example_table.ibd.hdlk
#sudo ls -lh /data/mysql/testdb
-rw-rw---- 1 mysql mysql 8.4K Oct 28 13:26 example_table.frm
-rw-rw---- 2 mysql mysql 100G Oct 28 13:26 example_table.ibd
-rw-rw---- 2 mysql mysql 100G Oct 28 13:26 example_table.ibd.hdlk
4.干掉大表,这个过程会比较快,因为有硬链接文件
DROP TABLE example_table;
#sudo ls -lh /data/mysql/testdb
-rw-rw---- 1 mysql mysql 100G Oct 28 13:26 example_table.ibd.hdlk
5.使用truncate命令收缩文件,从100G开始,每次缩减1G,停2秒,继续,直到文件只剩1G,最后使用rm命令删除剩余的部分
#for i in `seq 100 -1 1 `; do sleep 2; sudo truncate -s ${i}G /data/mysql/testdb/example_table.ibd.hdlk; done
#sudo rm -rf /data/mysql/testdb/example_table.ibd.hdlk;
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)