MySQL解决删除drop大表缓慢的问题
建立硬链接(如果是主从架构,请在所有机器上创建硬链接)
进入MySQL数据文件的目录
cd /var/lib/mysql/newdo_zipkin
例如表:zipkin_spans,把ibd和frm的都做起硬链接
ln zipkin_spans.ibd zipkin_spans.ibd.test
ln zipkin_spans.frm zipkin_spans.frm.test
数据库上执行drop表操作
use newdo_zipkin;
drop table zipkin_spans;
删除后在操作系统层面,文件zipkin_spans.ibd和zipkin_spans.frm都删除掉了,只剩下
zipkin_spans.ibd.test和zipkin_spans.frm.test
删除硬链接的.test文件
编写shell脚本,执行删除操作,需要配合truncate命令
查询是否安装了truncate
which truncate
如果没有,则需要先安装
shell脚本的内容为:
cd /var/lib/mysql/newdo_zipkin
TRUNCATE=/usr/bin/truncate
for i in `seq 8 -10 1 `;
do
sleep 2
$TRUNCATE -s ${i}G zipkin_spans.ibd.test
done
rm -rf zipkin_spans.ibd.test;
rm -rf zipkin_spans.frm.test;
EOF
其中 8 -10 10的意思:
8:该数值建议为文件当前GB大小
-10:每次递减的文件大小,根据耗时情况、以及服务性能情况来确定每次删减的大小为宜
1:最后保留的文件大小,建议至少为1