MySQL Galera Cluster 快速删除大表
先上步骤,以下步骤每台机器上都要按顺序执行。(一台一台搞):
第一步:为ibd文件创建硬链接来加速删除,减少对数据库造成的影响。
cd /data/mysqldata/test/ ln sbtest1.ibd sbtest1.ibd.hdlk |
第二步:进入MySQL,执行两条命令,在执行set命令之后,此session就不要对数据进行操作了,避免数据不同步。
1. set @@session.wsrep_on = OFF ; 2. drop table sbtest1; |
第三步:退出MySQL,删除.hdlk文件
rm -r sbtest1.ibd.hdlk |
原理:
执行完ln命令后,我们发现多了一个是吧sbtest1.ibd.hdlk文件,且sbtest1.ibd.hdlk和sbtest1.ibd的inode数均为2,因为我们知道,一个磁盘上的文件,可以有多个文件系统的文件引用,这个多个文件是完全相同的,都指向同一个磁盘上的文件,当我们删除任何一个文件的时候,都不会影像真实的文件,只是将其被引用数目减1,只有当被引用数目变为1的时候,再次删除文件,才会真正被删除。
删除时,这两种情况的却别很明显,一个是在减少被引用数目,一个是在真正做IO来删除它。这就将由MySQL来删除大文件的操作转换为一个简单的操作系统级的文件删除,从而减少了对MySQL的影响。