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