一般直接rm大文件必然会对数据库服务器的IO性能造成压力,因此可以使用coreutils的truncate工具对大文件进行shrink
该工具安装方法如下:
#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
实验如下:
[root@test /data]#du -hs S82.test.sql
907M S82.test.sql
对目标文件建立硬链接:
#ln S82.test.sql S82.test.sql.hdlk
[root@test /data]#l *S82*
-rw-r--r-- 2 root root 950988446 Apr 28 17:09 S82.test.sql
-rw-r--r-- 2 root root 950988446 Apr 28 17:09 S82.test.sql.hdlk
注意 大小为900M左右,因此我们使用coreutils工具集中的truncate命令对大文件进行shrink,可以写个脚本,
内容如下:
#cat truncate.sh
#!/bin/bash
TRUNCATE=/usr/local/bin/truncate
for i in `seq 900 -10 10 `; #从900 开始每次递减10 ,输出结果见下面
do
sleep 2
echo "$TRUNCATE -s ${i}M /data/S82.test.sql.hdlk"
$TRUNCATE -s ${i}M /data/S82.test.sql.hdlk
done
开始执行:
./truncate.sh
/usr/local/bin/truncate -s 900M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 890M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 880M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 870M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 860M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 850M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 840M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 830M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 820M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 810M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 800M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 790M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 780M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 770M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 760M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 750M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 740M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 730M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 720M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 710M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 700M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 690M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 680M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 670M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 660M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 650M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 640M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 630M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 620M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 610M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 600M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 590M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 580M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 570M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 560M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 550M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 540M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 530M /data/S82.test.sql.hdlk
........................................................
........................................................
/usr/local/bin/truncate -s 30M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 20M /data/S82.test.sql.hdlk
/usr/local/bin/truncate -s 10M /data/S82.test.sql.hdlk
shrink收缩后文件大小为10M左右:
[root@alpha-mongo-140-51 /data]#ll S82*
-rw-r--r-- 2 root root 10485760 Jul 25 13:43 S82.sq_comment.sql
-rw-r--r-- 2 root root 10485760 Jul 25 13:43 S82.sq_comment.sql.hdlk
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15498/viewspace-2158661/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/15498/viewspace-2158661/