bash shell 写的mysql备份定时任务

环境

linux centos 7.x
mysql 5.7.28

背景说明

装在另一台机器上的mysql 支持服务的数据存取。运维人员已为其配置从数据库,做主从备份。但是做数据从从库恢复的时候,整个过程比较长。所以决定在服务器上做mysql备份。

该备份使用mysqldump, 直接将这个数据库都保存到本地硬盘上。
备份策略: 每一小时备份一次,只保留24小时内的备份数据。

代码说明

获取当前时间:

name=$(date +%Y-%m-%d-%H-%M-%S)

构造输出文件名:

fname=$base$name

dump这个数据库:

/work/install/mysql-5.7.28/bin/mysqldump -h 173.30.40.140  -P3306 -uuser -ppassword   car_subsidy > $fname
timestamp=`date +%s`

获得当前时间戳:

timestamp=`date +%s`

获取当前目录下,文件名中包含 car_subsidy 的文件:

dir=$(ls -t | grep 'car_subsidy')

循环获取每个文件:

for FILE in $dir

获取文件创建的时间戳

filestamp=$(date +%s -r $FILE)

计算当前时间戳与文件的创建时间戳差值,差值大于24小时,则删除该文件,并将该行为记录到日志中:

 timediff=$[$timestamp-$filestamp]
    if [ $timediff -gt `expr 3600 \* 24` ];
    then
        rm -rf $FILE
        echo "delete ${FILE} ${d}" >> log
    fi
    done

定时任务

crontab -e
0 */1 * * *     cd /home/digitalx/backup && sh bp.sh

完整代码

bp.sh

cd /home/digitalx/backup
base="car_subsidy.sql"
name=$(date +%Y-%m-%d-%H-%M-%S)
fname=$base$name
/work/install/mysql-5.7.28/bin/mysqldump -h 173.30.40.140  -P3306 -uuser -ppassword   car_subsidy > $fname
timestamp=`date +%s`
d=$(date +%Y-%m-%d-%H-%M-%S)
echo $timestamp
dir=$(ls -t | grep 'car_subsidy')
for FILE in $dir
    do
    filestamp=$(date +%s -r $FILE)
    timediff=$[$timestamp-$filestamp]
    if [ $timediff -gt `expr 3600 \* 24` ];
    then
        rm -rf $FILE
        echo "delete ${FILE} ${d}" >> log
    #    echo "finished at ${d}" >> log
    fi
    done

echo "finished at ${d}" >> log

你可能感兴趣的:(linux,mysql,linux)