MySQL大表DROP删除小技巧
时间:2019-05-13 11:31 来源:linux.it.net.cn 作者:IT
在日常工作中,经常会遇到历史大表从主库上迁移到备份机,以便腾出主库空间,那么如果你直接drop table 后,可能会引起数据库抖动,连接数升高等问题,从而影响业务。
那么用一个小技巧,即可轻松平滑的从主库上删除历史大表。
1、创建一个硬链接,在drop table 表时,"欺骗"MySQL已经删除完毕。
ln test.ibd test.ibd.hdlk
2、这个时候不要直接rm test.ibd.hdlk,这样会引起磁盘IO转速上升,MySQL会发生性能抖动。
我们这里写一个脚本,每次循环1G,休眠2秒,直至删除完。
1)先移动test.ibd.hdlk到/data/bak/目录下
mv test.ibd.hdlk /data/bak/
2)执行下面的脚本即可:
#!/bin/bash
TRUNCATE=/usr/bin/truncate
for i in `seq 100 -1 0 `
#从100G 开始每次递减1G,最终让文件变成0
do
sleep 2
echo "$TRUNCATE -s ${i}G /data/bak/test.ibd.hdlk"
$TRUNCATE -s ${i}G /data/bak/test.ibd.hdlk
done
注:先ll -h test.ibd.hdlk看一下该文件有多少G,然后输入seq后面,上述例子为100G。 (责任编辑:IT)
在日常工作中,经常会遇到历史大表从主库上迁移到备份机,以便腾出主库空间,那么如果你直接drop table 后,可能会引起数据库抖动,连接数升高等问题,从而影响业务。 那么用一个小技巧,即可轻松平滑的从主库上删除历史大表。 1、创建一个硬链接,在drop table 表时,"欺骗"MySQL已经删除完毕。 ln test.ibd test.ibd.hdlk 2、这个时候不要直接rm test.ibd.hdlk,这样会引起磁盘IO转速上升,MySQL会发生性能抖动。 我们这里写一个脚本,每次循环1G,休眠2秒,直至删除完。 1)先移动test.ibd.hdlk到/data/bak/目录下 mv test.ibd.hdlk /data/bak/ 2)执行下面的脚本即可: #!/bin/bash TRUNCATE=/usr/bin/truncate for i in `seq 100 -1 0 ` #从100G 开始每次递减1G,最终让文件变成0 do sleep 2 echo "$TRUNCATE -s ${i}G /data/bak/test.ibd.hdlk" $TRUNCATE -s ${i}G /data/bak/test.ibd.hdlk done 注:先ll -h test.ibd.hdlk看一下该文件有多少G,然后输入seq后面,上述例子为100G。 (责任编辑:IT) |