dtcms文档 CSS选择器 另类堆栈 阿里巴巴 Pytorch merge 如何做网络营销推广 path tags gtk ionic framework ACE 河南普通话考试 纯html网页模板 svn默认安装路径 linux超级用户 linux环境变量生效 bootstrap模态框传参 ab软启动器 图片生成链接 python基础 mysql 连接 python写入文件 python读取本地文件 javamysql javarandom java正则表达式详解 java匿名对象 javahttp java抛出自定义异常 java创建文件夹 java游戏开发教程 sql语句大全实例教程 matlab2016a安装教程 华为线刷工具 ps选择反向快捷键 手机主题之家 flash制作工具 疯狂java java字符串截取
当前位置: 首页 > 学习教程  > 编程语言

MySQL中快速删除大表

2021/2/13 18:05:44 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

1,背景:某些情况下需要清理线上的大表。 如果设置了分区表的归档日志表,需要删除指定日期前的数据,直接truncate 或者drop table 可能造成所在服务器的IO吃满,进而影响线上业务。这里我们介绍采用硬链接的方式进行删除…

1,背景:某些情况下需要清理线上的大表。

如果设置了分区表的归档日志表,需要删除指定日期前的数据,直接truncate 或者drop table 可能造成所在服务器的IO吃满,进而影响线上业务。这里我们介绍采用硬链接的方式进行删除大表

2,解决方案

这里需要利用了linux中硬链接的知识,来进行快速删除。

所谓的硬链接,就是不止一个文件名指向node Index,有好几个文件名指向node Index
假设,这会又有一个文件名指向上面的node Index,即

这个时候,你做了删除文件名(1)的操作,linux系统检测到,还有一个文件名(2)指向node Index,因此并不会真正的把文件删了,而是把步骤(2)的引用给删了,这步操作非常快,毕竟只是删除引用。于是图就变成了这样

接下来,你再做删除文件名(2)的操作,linux系统检测到,没有其他文件名指向该node Index,就会删除真正的存储文件,这步操作,是删真正的文件,所以比较慢。

step1,建立硬链接

[root@localhost test]# ln  /dbfiles/mysql_home/data/test/t2.ibd  /dbfiles/mysql_home/data/test/t2.ibd.hdlk
 

step2,drop table

mysql> drop table t2;
Query OK, 0 rows affected (1.22 sec)
你会发现,不到1秒就删除了。因为,此时有两个文件名称,同时指向一个inode.这个时候,执行删除操作,只是把引用给删了,所以非常快。
那么,这时的删除,已经把table从mysql中删除。但是磁盘空间,还没释放,因为还剩一个文件

如何正确的删除t2.ibd.hdlk 呢
 

TRUNCATE=/usr/bin/truncate
 for i in `seq 10 -1 1 `; do 
    sleep 2 $TRUNCATE -s ${i}G /dbfiles/mysql_home/data/test/t2.ibd.hdlk 
done 
rm -rf   /dbfiles/mysql_home/data/test/t2.ibd.hdlk  ;

从10G开始,每次缩减1G,停2秒,继续,直到文件只剩1G,最后使用rm命令删除剩余的部分。


本文链接: http://www.dtmao.cc/news_show_700184.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?