Xtrabackup MySQL增量备份脚本分享 增量脚本mysql_incremental.sh,可通过crontab定时任务执行。 #!/bin/sh #################################################################### # # 作者:大帅 # 各项参数详细说明请参考作者文章:https://www.sirix.app/archives/27.html # #################################################################### # innobackupex执行文件 INNOBACKUPEX=innobackupex # innobackupex所在目录 INNOBACKUPEXFULL=/usr/bin/$INNOBACKUPEX # 获取当前时间 TODAY=$(date +%Y%m%d%H%M) # MySQL用户名、密码等配置 USEROPTIONS="--host=127.0.0.1 --user=root --password=123456" # 压缩配置 COMPRESS="--compress --parallel=4 --compress-threads=4" # 临时文件 TMPFILE="/var/log/mysql/incr_$TODAY.log" # MySQL配置文件 MYCNF=/etc/my.cnf # MySQL执行文件目录 MYSQL=//usr/bin/mysql # MySQL mysqladmin执行文件目录 MYSQLADMIN=/usr/bin/mysqladmin # 备份的主目录 BACKUPDIR=/mysql_backup # 全库备份的目录∏ FULLBACKUPDIR=$BACKUPDIR/full # 增量备份的目录 INCRBACKUPDIR=$BACKUPDIR/incr ############################################################################# # 显示错误消息并退出 ############################################################################# error() { echo "$1" 1>&2 exit 1 } # 执行之前检查 if [ ! -x $INNOBACKUPEXFULL ]; then error "$INNOBACKUPEXFULL 不存在." fi if [ ! -d $BACKUPDIR ]; then error "备份的主目录: $BACKUPDIR 不存在." fi if [ -z "$($MYSQLADMIN $USEROPTIONS status | grep 'Uptime')" ]; then error "已停止: MySQL未启动." fi if ! $(echo 'exit' | $MYSQL -s $USEROPTIONS); then error "已停止: 提供的MySQL用户名或密码似乎不正确(出于安全考虑,此处未复制,请参阅脚本)." fi # 信息输出 echo "----------------------------" echo echo "$0: MySQL备份脚本" echo "开始时间: $(date)" echo # 如果全量备份目录不存在则创建完整和增量备份目录 for i in $FULLBACKUPDIR $INCRBACKUPDIR; do if [ ! -d $i ]; then mkdir -pv $i fi done # 查找最新的完整备份 LATEST_FULL=$(find $FULLBACKUPDIR -mindepth 1 -maxdepth 1 -type d -printf "%P\n") echo "LATEST_FULL=$LATEST_FULL" # 如果最新完整备份仍然存在,运行增量备份 # 创建增量备份目录(如果增量备份目录不存在) mkdir -p $INCRBACKUPDIR BACKTYPE="incr" # 查找最新的增量备份 LATEST_INCR=$(find $INCRBACKUPDIR -mindepth 1 -maxdepth 1 -type d | sort -nr | head -1) echo "LATEST_INCR=$LATEST_INCR" # 如果这是第一次增量,请使用完整备份作为基准。否则使用最新的增量作为基准。 if [ ! $LATEST_INCR ]; then INCRBASEDIR=$FULLBACKUPDIR/$LATEST_FULL else INCRBASEDIR=$LATEST_INCR fi echo "运行新的增量备份,使用 $INCRBASEDIR 作为基准." echo "innobackupex --defaults-file=$MYCNF $USEROPTIONS $COMPRESS --incremental $INCRBACKUPDIR --incremental-basedir $INCRBASEDIR > $TMPFILE 2>&1" innobackupex --defaults-file=$MYCNF $USEROPTIONS $COMPRESS --incremental $INCRBACKUPDIR --incremental-basedir $INCRBASEDIR >$TMPFILE 2>&1 if [ -z "$(tail -1 $TMPFILE | grep 'completed OK!')" ]; then echo "$INNOBACKUPEX 失败:" echo echo "---------- ERROR OUTPUT from $INNOBACKUPEX ----------" exit 1 fi # 这里获取这次备份的目录 THISBACKUP=$(awk -- "/Backup created in directory/ { split( \$0, p, \"'\" ) ; print p[2] }" $TMPFILE) echo "THISBACKUP=$THISBACKUP" echo echo "数据库备份成功 to: $THISBACKUP" echo echo "增量备份已完成: $(date)" exit 0 数据库 #MySQL #Xtrabackup #备份 #分享 Xtrabackup MySQL增量备份脚本分享 https://www.gmtgo.com/133.html 作者 大帅 发布于 2021年8月18日 许可协议 解决多项目共用一个Jenkinsfile文件参数被覆盖的问题 上一篇 删除Elasticsearch指定时间段索引(保留最新N天索引) 下一篇