#!/bin/bash
#该脚本为MySQL数据库备份策略,用于定期备份 MySQL数据库,以便在发生数据丢失时可以恢复数据(未包含恢复数据操作)。
#备份策略:
#计划任务每天凌晨两点运行脚本,判断为周一则完整备份;
#判断为周日:则查询并匹配备份路径下六天前的完整备份的数据做差异备份;
#非周一或周日,则自动做增量备份。若未做周一备份则不能周二实现备份。此处注意。
#备份数据文件存储路径,xtrabackup自动命名备份文件为时间戳。
#备份数据文件保留半个月:每周都会做完整备份,超过15天的备份文件自动删除;
BACKUP_DIR="/home/mysql_App/mysql_xtrabackup/"
#日志记录:记录备份过程中的日志路径,echo追加生成mysql_backup.log文件
BACKUP_LOG="/home/mysql_App/mysql_xtrabackup_log/"
#设置邮件接收人
recipients="通知人邮箱"
[ -d $BACKUP_DIR ] || mkdir -p $BACKUP_DIR &>/dev/null
[ -d $BACKUP_LOG ] || mkdir -p $BACKUP_LOG &>/dev/null
#设置mysql账户和密码为变量。生产环节中需DBA专门设置专门用来备份数据的账号,只赋予少数权限。
#SELECT, RELOAD, LOCK TABLES
#grant SELECT, RELOAD, LOCK TABLES on *.* to 'bbxbackup'@'localhost' identified by ‘yourpassword’
SQL_USER='root'
SQL_PQSSWD='Hh***254'
WEEK=`date +%w`
NIU='牛牛报告'
case ${WEEK} in
1)
innobackupex --user=${SQL_USER} --password="'$SQL_PQSSWD'" $BACKUP_DIR
if [ $? -eq 0 ];then
echo "date +"%y-%m-%d_%H-%M-%S" mysql full backup Success" >>$BACKUP_LOG
sendDingMysql " "$NIU":$(date '+%Y-%m-%d %H:%M') 完全备份成功"
echo "$(date '+%Y-%m-%d %H:%M') 完整备份已完成 登录服务器可查看"| mail -s "数据库备份信息" $recipients
;;
7)
FULLBACKDAY=`date -d'-6 day' +%Y-%m-%d`
FULL_BACK=$(find ${BACKUP_DIR} -name ${FULLBACKDAY} -exec basename {} \;)
if [ -f ${FULL_BACK} ];then
innobackupex --user=${SQL_USER} --password="'$SQL_PQSSWD'" --incremental $BACKUP_DIR --incremental-basedir=${BACKUP_DIR}${FULL_BACK} --incremental
if [ $? -eq 0 ];then
echo "date +"%y-%m-%d_%H-%M-%S" mysql difference backup Success" >>$BACKUP_LOG
sendDingMysql ""$NIU":$(date '+%Y-%m-%d %H:%M') 差异备份成功!"
echo "$(date '+%Y-%m-%d %H:%M') 差异备份已完成 登录服务器可查看" | mail -s "数据库备份信息" $recipients
else
echo "date +"%y-%m-%d_%H-%M-%S" 未查询到昨日备份or完整备份数据 mysql difference backup Faild" >>$BACKUP_LOG
echo "$(date '+%Y-%m-%d %H:%M') 差异备份失败 未查询到完整备份数据" | mail -s "数据库备份信息" $recipients
sendDingMysql " "$NIU":$(date '+%Y-%m-%d %H:%M') 未查询到完整备份数据 差异备份失败"
fi
fi
;;
*)
YESTERDAY=`date -d'-1 day' +%Y-%m-%d`
YESTER_back=$(find ${BACKUP_DIR} -name ${YESTERDAY} -exec basename {} \;)
if [ -f ${YESTER_back} ];then
innobackupex --user=${SQL_USER} --password="'$SQL_PQSSWD'" --incremental $BACKUP_DIR --incremental-basedir=${BACKUP_DIR}${YESTER_back}
if [ $? -eq 0 ];then
echo "date +"%y-%m-%d_%H-%M-%S" mysql increment backup Success" >>$BACKUP_LOG
echo "$(date '+%Y-%m-%d %H:%M') 增量备份已完成 登录服务器可查看" | mail -s "数据库备份信息" $recipients
sendDingMysql ""$NIU":$(date '+%Y-%m-%d %H:%M')增量备份成功"
else
echo "date +"%y-%m-%d_%H-%M-%S" 未查询到昨日备份or完整备份数据 mysql increment backup Faild" >>$BACKUP_LOG
echo "$(date '+%Y-%m-%d %H:%M') 增量备份失败 未查询到昨日备份or完整备份数据" | mail -s "数据库备份信息" $recipients
sendDingMysql ""$NIU":$(date '+%Y-%m-%d %H:%M') 增量备份失败 未查询到昨日备份or完整备份数据"
fi
fi
;;
esac
#备份数据文件保留半个月:每周都会做完整备份,超过15天的备份文件自动删除;
#删除超过保留天数的备份文件
find ${BACKUP_DIR} -type f -mtime +15 -delete
#crontab -e 设置计划任务,每天凌晨2点整运行备份脚本。脚本存放位置:/root/shell/
00 2 * * * /bin/bash /root/shell/mysqlxtrabackup.sh &>/dev/null
mysqlxtrabackup备份脚本
于 2023-11-14 19:59:13 首次发布