介绍
本文简单介绍在MYSQL下如何安全且快速删除大表的方法。

MYSQL中直接使用droptable命令删除大表会导致全局锁而影响数据库响应和业务连接,甚至使整个MYSQL服务器挂起。考虑使用linux下的硬链接操作来实施大表删除,从而最小化对数据库自身的健康状况造成的影响。
使用硬链接删除大表
硬链接是指多个文件名指向同一个节点索引(即inode),使用硬链接时,删除文件名整体操作速度非常快,在删除硬链接文件名时,文件并没有被真正删除,只是被重命名,如果有其他文件名指向它,只需删除对应的文件名即可。
在删除大表的实际操作中,可以先在双主架构中建立硬链接,然后在主库上只保留硬链接,最后使用for循环进行小量文件多次删除,直到大文件变小后再从磁盘上删除。
具体步骤:
- 在50主机上建立硬链接:ln /data/mysql/db_xxx_test/data/xxx/alipay_fans.ibd /data/mysql/db_xxx_test/data/xxx/alipay_fans.ibd.bbk,在51主机上建立相同的硬链接。
- 在主库50上操作:drop table xxx.alipay_fans。这会保留硬链接bbk,查看从库51上的文件情况,同样只保留了bbk的硬链接。
- 在50主机上操作:truncate -s [size]G /data/mysql/db_xxx_test/data/xxx/Alipay_fans.ibd.bbk,其中[size]为文件大小,每次缩减1G。然后使用ll -h /data/mysql/db_xxx_test/data/xxx/Alipay_fans.ibd.bbk检查文件是否已经被缩小,直到文件大小变为1G后使用rm命令删除文件剩余部分。
- 验证主从状态,操作完成后主从状态正常,数据库状态正常。
总结
使用硬链接删除大表能够较快且安全地删除大表而不会影响MYSQL服务器和业务连接的正常运行。通过建立硬链接和多次小量文件的操作能够快速将大文件缩小并从磁盘上删除。
原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/6165.html
