環境
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