MySQL Galera Cluster 快速删除大表

MySQL Galera Cluster 快速删除大表

 

先上步骤,以下步骤每台机器上都要按顺序执行。(一台一台搞):

第一步:为ibd文件创建硬链接来加速删除,减少对数据库造成的影响。

cd /data/mysqldata/test/
ln sbtest1.ibd sbtest1.ibd.hdlk


第二步:进入MySQL,执行两条命令,在执行set命令之后,此session就不要对数据进行操作了,避免数据不同步。

set @@session.wsrep_on = OFF ;
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的影响。

posted @ 2018-08-20 11:13  likappe  阅读(232)  评论(0编辑  收藏  举报