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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章