MySQL 使用硬链接配合truncate 删除2.2T的表

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
原文地址:https://www.cnblogs.com/lmaster/p/6373208.html