网站源码和数据库的定期备份的重要性大家都清楚,可以对于随备份文件的增加,不定期删除将会浪费很多时间,但是需要人为去清理感觉很麻烦,因此需要自动定期删除。

本人想到两个办法:

1  利用时间戳的差值去定期删除

2  使用logrotate去删除文件

第一种代码如下

    

#!/bin/bash
webdir=/usr/local
backdir=/usr/local/backdir
var1=`date +%Y%m%d`
timelimit=2592000  #这里表示时间为30天
/usr/local/mysql/bin/mysqldump  -u root -p123456   test > $backdir/test_`date +%Y%m%d`.sql
if [[ $? -eq 0  ]];then
        echo  "mysql databases  test  backup succeed"
fi
cd  $webdir
tar  -zcf   test_`date +%Y%m%d`.tar.gz  test
if [[ $? -eq 0  ]];then
        echo  "webdir  test  backup succeed"
fi
mv  test_`date  +%Y%m%d`.tar.gz    $backdir
cd  $backdir
for i in  `ls $backdir | awk  -F_  '{print $2 }' | awk  -F. '{print $1}'`
do
        olddate=`date -d $i  +%s`
        newdate=`date +%s`
        diffdate=`expr $(($newdate-$olddate))` #通过文件创建时间与现在时间的时间戳的差值去判断是否删除文件
        echo $diffdate
        echo $timelimit
        if  [[  $diffdate -gt $timelimit    ]];then
                rm  -fr    *$i*
        #       echo  "yes"
        fi
done


值得注意的是,打包的时候不要使用绝对路径,会提示

tar: 从成员名中删除开头的”/”这样的警告

我就加了个cd,如果有更好的想法,望告诉本人

cd  $webdir

tar  -zcf   hyWeb_`date +%Y%m%d`.tar.gz  test 


第二种就是 先备份文件,然后通过配置logrotate配置文件去删除旧文件。还可以使用python的time模块去控制文件的删除。呵呵!!!


小结:

对于一般的文件备份来说,差异备份可以使用md5sum命令删除多余文件,而全备可以使用时间戳来控制。