1 创建tmp 表并 rename 表
mysql> rename table ep to ep_bak;
Query OK, 0 rows affected (0.07 sec)
mysql> rename table ep_tmp to ep;
Query OK, 0 rows affected (0.01 sec)
2 对bak表创建硬链接
ln ep_bak.ibd ep_bak.ibd.hdlk
root@rac1 # ll ep_bak.*
-rw-rw---- 1 mysql mysql 9023 Jul 28 2011 ep_bak.frm
-rw-rw---- 2 mysql mysql 2356792000512 Nov 30 18:05 ep_bak.ibd
-rw-rw---- 2 mysql mysql 2356792000512 Nov 30 18:05 ep_bak.ibd.hdlk
3 删除表 ep_bak
drop table ep_bak;
注意 表的大小为2194G,直接rm 必然会对数据库服务器的IO性能造成压力,因此我们使用coreutils 工具集中的truncate 对大文件进行shrink,脚本内容如下:
#!/bin/bash
TRUNCATE=/usr/local/bin/truncate
for i in `seq 2194 -10 10 `; #从2194 开始每次递减10 ,输出结果见下面
do
sleep 2
echo "$TRUNCATE -s ${i}G /home/mysql/data3306/mysql/monitor/ep_bak.ibd.hdlk "
$TRUNCATE -s ${i}G /home/mysql/data3306/mysql/monitor/ep_bak.ibd.hdlk
done
如何使用 coreutils ?
#wget http://ftp.gnu.org/gnu/coreutils/coreutils-8.9.tar.gz
#tar -zxvf coreutils-8.9.tar.gz
#cd coreutils-8.9
#./configure
#make