使用mysqldump进行全备,增备是备份binlog日志 对应的一些变量按照实际环境进行修改即可,如果有更好的思路也可以进行评论交流。
配合计划任务即可完成定时备份的需求,脚本中备份文件存放目录提前创建或者在加个判断进行创建不过我觉得没啥必要。
写个计划任务每天凌晨2点进行备份操作
crontab -e
00 02 * * * /bin/bash /home/mysqldump.sh
vim mysqldump.sh
#!/bin/bash
#此脚本定义周一、周三、周五进行全备 周二、周四、周六、周日进行增备(备份binlog日志)
#--all-databases 备份所有数据库 --single-transaction 对事务引擎执行热备 --flush-logs 刷新日志即新建一个binlog文件
#
#定义备份用户
USER="root"
PASSWORD="Zxcvbnm@2022"
#全备存放目录
BACKUP="/home/mysqlbakup"
#定义binglog日志目录和备份存放目录
DATA_DIR="/var/log/mysql"
BACKUP_LOG="/home/mysqlbakup/mysqlbinlog/"
#备份操作记录存放日志
BAKLOG="/home/bak.log"
#定义时间变量
DATE=$(date)
LOG_TIME=`date +"%Y-%m-%d-%H:%M:%S".sql`
#LOG=$DATE.sql
#定义星期几
week=$(date |awk 'NR==1{print $4}')
num=${week}
case "$num" in
"星期一")
mysqldump -u${USER} -p${PASSWORD} --all-databases --single-transaction --flush-logs --master-data=2 > ${BACKUP}/"$LOG_TIME"
echo ""$DATE"全备完成" >> $BAKLOG
;;
"星期二")
cp -u "$DATA_DIR"/* "$BACKUP_LOG"
echo ""$DATE"增量备份完成" >> $BAKLOG
;;
"星期三")
mysqldump -u${USER} -p${PASSWORD} --all-databases --single-transaction --flush-logs --master-data=2 > ${BACKUP}/"$LOG_TIME"
echo ""$DATE"全备完成" >> $BAKLOG
;;
"星期四")
cp -u "$DATA_DIR"/* "$BACKUP_LOG"
echo ""$DATE"增量备份完成" >> $BAKLOG
;;
"星期五")
mysqldump -u${USER} -p${PASSWORD} --all-databases --single-transaction --flush-logs --master-data=2 > ${BACKUP}/"$LOG_TIME"
echo ""$DATE"全备完成" >> $BAKLOG
;;
"星期六")
cp -u "$DATA_DIR"/* "$BACKUP_LOG"
echo ""$DATE"增量备份完成" >> $BAKLOG
;;
"星期日")
cp -u "$DATA_DIR"/* "$BACKUP_LOG"
echo ""$DATE"增量备份完成" >> $BAKLOG
;;
esac
#此判断是为了发送备份文件到指定服务器以及清理备份文件防止占用过多磁盘
if [ $num = "星期日" ];then
tar czf ${BACKUP}.tar $BACKUP/ > /dev/null 2>&1 && scp ${BACKUP}.tar root@192.168.11.144:/home && rm -rf $BACKUP/*.sql && rm -rf $BACKUP_LOG/*
echo ""$DATE"今天清理了备份文件" >> $BAKLOG
else
echo ""$DATE"今天不进行清理操作" >> $BAKLOG
Fi
写好后可以修改服务器时间加定时任务测试一下脚本效果,修改一周所有的时间进行测试
5 11 * * * /bin/bash /home/mysqldump.sh
date -s "2022-11-27 11:24:58"
可以看到执行记录里的内容是成功了。