【引言】
之前推过一篇采用percona的xtrabackup 进行数据备份和恢复的推文,
链接如下:
《MySQL备份神器:如何采用percona的xtrabackup 进行数据备份和恢复》
今天再来推一篇生产环境中使用percona的xtrabackup 对MySQL进行全量+增量备份的脚本。
脚本内容如下:Xtrabackup.sh
############################################### #1. 该备份脚本需要加入到cron中,每天自动执行该脚本 #2. 以周为单位,进行一次全备,比如周六凌晨 #3. 然后一周中其他备份时间执行增量备份 ###############################################
复制
##Filename : MySQL_Xtrabackup.sh ##Date : 2020-12-23 ##Author : Ethan_Yang ##Desc : Phisical MySQL_backup mysql database ##备份策略: ##周日(7): 全备 ##周一 ~ 周六(1-6): 增量备份 source /etc/profile ulimit -HSn 102400 ## ##========== global var ============ ## #如果一台服务器上有多个MySQL,可以使用 BAK_DIR_ROOT进行备份路径的区别 #可增加端口作为区分,例如 /opt/backup/mysqk/3306 BAK_DIR_ROOT="/opt/backup/mysql" #默认周日进行全备 (1 - 7), 1 是周一,7是周日 FULL_BAK_DAY_OF_WEEK=7 #备份文件保留周期,默认保留35天 (4-5周) HOLD_DAYS=35 MYSQL_USERNAME="epoint_backup" MYSQL_PASSWORD=<PASSWORD> MYSQL_CNF="/etc/my.cnf" MYSQL_MULTI_GROUP="--socket=/tmp/mysql.sock" #如果使用多实例,比如通过ecloud的方式下发安装,默认使用多实例 #MYSQL_MULTI_GROUP="--defaults-group=mysqld3307 --socket=/tmp/mysql3307.sock" CURRENT_WEEK_OF_YEAR=$(date +%U) CURRENT_DAY_OF_WEEK=$(date +%u) CURRENT_DATE=$(date +%F) CURRENT_TIME=$(date +%H-%M-%S) CURRENT_DATETIME="${CURRENT_DATE}_${CURRENT_TIME}" BAK_WEEK_DIR="${BAK_DIR_ROOT}/WEEK_${CURRENT_WEEK_OF_YEAR}" BAK_FULL_DIR="${BAK_WEEK_DIR}/FULL" BAK_LOG="${BAK_WEEK_DIR}/backup.log" ## ##========== function ============= ## function clean_backup() { find ${BAK_DIR_ROOT} -mtime +${HOLD_DAYS} -prune -exec rm -rf {} \; } function write_start_log() { if [[ ! -d ${BAK_WEEK_DIR} ]];then mkdir -p ${BAK_WEEK_DIR} fi echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ${CURRENT_DATETIME} Begin Backup <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" >> ${BAK_LOG} } function full_backup() { if [[ ! -d ${BAK_FULL_DIR} ]]; then mkdir -p ${BAK_FULL_DIR} fi echo "*** FULL BACKUP Date : ${CURRENT_DATETIME}" >> ${BAK_FULL_DIR}/full_backup.date innobackupex --defaults-file=${MYSQL_CNF} ${MYSQL_MULTI_GROUP} --no-timestamp --user=${MYSQL_USERNAME} --password=${MYSQL_PASSWORD} --compress --compress-threads=4 --stream=xbstream --parallel=4 --extra-lsndir="${BAK_FULL_DIR}/LSN_INFO" ${BAK_FULL_DIR} > "${BAK_FULL_DIR}/mysql_backup_full.xbstream" 2>> ${BAK_LOG} } #每周周一到周六进行增量备份 function incr_backup() { CURRENT_INCR_DIR="${BAK_WEEK_DIR}/INCR_${CURRENT_DAY_OF_WEEK}" PREV_DAY_OF_WEEK=$((${CURRENT_DAY_OF_WEEK} - 1)) BASE_DIR="${BAK_WEEK_DIR}/INCR_${PREV_DAY_OF_WEEK}" #如果不存在之前的增量,则使用全量路径作为增量的BASE #比如周一的时候 if [[ ! -d ${BASE_DIR} ]];then BASE_DIR=${BAK_FULL_DIR} fi #如果在此函数中,还没有BASE,则认为可能是在项目第一周执行 #进行一次全量备份 if [[ ! -d ${BASE_DIR} ]];then echo "*** ${BASE_DIR} as BASE_DIR is not exists!" >> ${BAK_LOG} echo "*** So Backup Processor into FULL BACKUP " >> ${BAK_LOG} full_backup exit $? fi #如果存放增量数据的目录已经存在,这里进行添加时间戳处理(一天备份多次) if [[ -d ${CURRENT_INCR_DIR} ]];then CURRENT_INCR_DIR="${CURRENT_INCR_DIR}_${CURRENT_DATETIME}" fi #如果BASE_DIR 存在,则进行增量备份 if [[ ! -d ${CURRENT_INCR_DIR} ]];then mkdir -p ${CURRENT_INCR_DIR} fi echo "*** INCR BACKUP Date : ${CURRENT_DATETIME}" >> ${CURRENT_INCR_DIR}/incr_backup.date innobackupex --defaults-file=${MYSQL_CNF} ${MYSQL_MULTI_GROUP} --no-timestamp --user=${MYSQL_USERNAME} --password=${MYSQL_PASSWORD} --compress --compress-threads=4 --stream=xbstream --parallel=4 --incremental --incremental-basedir="${BASE_DIR}/LSN_INFO" --extra-lsndir="${CURRENT_INCR_DIR}/LSN_INFO" ${CURRENT_INCR_DIR} > "${CURRENT_INCR_DIR}/mysql_backup_incr_${CURRENT_DAY_OF_WEEK}.xbstream" 2>> ${BAK_LOG} } #################main ################# write_start_log #如果指定的全备时间 == 当前的时间,则执行全备 if [[ ${FULL_BAK_DAY_OF_WEEK} -eq ${CURRENT_DAY_OF_WEEK} ]];then full_backup exit $? fi
复制
脚本至此
欢迎关注个人微信公众号“一森咖记”
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
文章被以下合辑收录
评论
感谢大佬分享
2年前

评论
相关阅读
【MySQL 30周年庆】MySQL 8.0 OCP考试限时免费!教你免费领考券
墨天轮小教习
3068次阅读
2025-04-25 18:53:11
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
严少安
863次阅读
2025-04-25 15:30:58
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
509次阅读
2025-04-17 17:02:24
MySQL 9.3 正式 GA,我却大失所望,新特性亮点与隐忧并存?
JiekeXu
444次阅读
2025-04-15 23:49:58
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
381次阅读
2025-04-15 14:48:05
MySQL 8.0 OCP 1Z0-908 考试解析指南(二)
JiekeXu
317次阅读
2025-04-30 17:37:37
SQL优化 - explain查看SQL执行计划(下)
金同学
288次阅读
2025-05-06 14:40:00
记录MySQL数据库的一些奇怪的迁移需求!
陈举超
285次阅读
2025-04-15 15:27:53
MySQL 8.0 OCP 1Z0-908 考试题解析指南
青年数据库学习互助会
273次阅读
2025-04-30 12:17:54
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
数据库运维之道
271次阅读
2025-04-28 11:01:25