阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

基于XtraBackup 2.3.5 的 MySQL全量备份与增量备份

175次阅读
没有评论

共计 5084 个字符,预计需要花费 13 分钟才能阅读完成。

基于 XtraBackup 2.3.5  的 MySQL 全量备份与增量备份,备注:脚步恢复时只能恢复到备份前的状态,如果需要恢复到当前状态,还需配合 binlog。

#!/bin/sh 

####################################################

#  AUTHOR          :            JusonSummer      #

#  VERSION        :              V1.0.0          #

#  DATE            :              2016-08-13      #

#  CORPORATION    :              FiberHome        #

####################################################

 

# 基于 xtrabackup 2.3.5 

# 星期四, 星期日全备, 其他工作日每天一次增量备份, 手动执行可通过设置 WEEK_NUM 来确定是增量还是全量

 

     

INNOBACKUPEX=innobackupex                    #INNOBACKUPEX 的命令 

 

#mysql 目标服务器以及备份用户及密码 

MYSQL_USER=root

MYSQL_PASSWORD=root

MYSQL_HOST=localhost

MYSQL_PORT=3306 

MY_CNF=/etc/my.cnf

MYSQL_CMD=” –user=$MYSQL_USER –password=$MYSQL_PASSWORD –host=$MYSQL_HOST –port=$MYSQL_PORT”

 

TMP_LOG=”/var/log/backup.$$.log”              # $$ 当前 shell 进程号

BACKUP_DIR=/mysql_backup                      # 备份的主目录 

FULLBACKUP_DIR=$BACKUP_DIR/full                # 全库备份的目录 

INCRBACKUP_DIR=$BACKUP_DIR/incre              # 增量备份的目录 

BACKUP_LOG_DIR=$BACKUP_DIR/log                # 备份日志的目录

LOGFILE_NAME=backup_`date +%Y%m%d%H%M%S`.log  # 备份日志文件名

 

# 星期

WEEK_NUM=`date +%w`

#WEEK_NUM=0

 

# 新建全备和差异备份的目录 

 

mkdir -p $FULLBACKUP_DIR 

mkdir -p $INCRBACKUP_DIR

mkdir -p $BACKUP_LOG_DIR

 

#colour level

SETCOLOR_SUCCESS=”echo -en \\033[1;32m”

SETCOLOR_FAILURE=”echo -en \\033[1;31m”

SETCOLOR_WARNING=”echo -en \\033[1;33m”

SETCOLOR_NORMAL=”echo -en \\033[0;39m”

 

# 日志输出函数

LogMsg()

{

        time=`date “+%D %T”`

        echo “[$time] : INFO    : $*”

        echo “[$time] : INFO    : $*” >>$BACKUP_LOG_DIR/$LOGFILE_NAME

        $SETCOLOR_NORMAL

}

 

LogWarnMsg()

{

        time=`date “+%D %T”`

        $SETCOLOR_WARNING

        echo “[$time] : WARN    : $*”

        $SETCOLOR_NORMAL

}

 

LogSucMsg()

{

        time=`date “+%D %T”`

        $SETCOLOR_SUCCESS

        echo “[$time] : SUCCESS : $*”

        echo “[$time] : SUCCESS : $*” >>$BACKUP_LOG_DIR/$LOGFILE_NAME

        $SETCOLOR_NORMAL

}

 

LogErrorMsg()

{

        time=`date “+%D %T”`

        $SETCOLOR_FAILURE

        echo “[$time] : ERROR  : $*”

        $SETCOLOR_NORMAL

}

   

# 检查 innobackupex 错误输出

check_innobackupex_fail()

{

    #保留一份备份的详细日志

    cat $TMP_LOG>>$BACKUP_LOG_DIR/$LOGFILE_NAME

    if [-z “`tail -2 $TMP_LOG | grep ‘completed OK!’`”] ; then

    LogErrorMsg “$INNOBACKUPEX 命令执行失败 ”

    rm -f $TMP_LOG

    LogErrorMsg “ 错误日志请查看 $BACKUP_LOG_DIR/$LOGFILE_NAME”

    exit 1

  fi

}

 

   

# 选项检测

$INNOBACKUPEX -v

if [`echo $?` -ne 0]; then

    LogErrorMsg “$INNOBACKUPEX 命令不存在, 请确认是否安装 xtrabackup 或环境变量是否配置 ”

    exit 1 

fi     

 

PORTNUM00=`netstat -lnt|grep ${MYSQL_PORT}|wc -l`

if [$PORTNUM00 = 0];

then

    LogErrorMsg “MySQL 处于关闭状态, 请打开 MySQL.”

    exit 1

fi 

 

if ! `echo ‘exit’ | mysql -s $MYSQL_CMD –show-warnings=false` ; then

    LogErrorMsg “ 数据库的用户名、密码、主机名或端口中存在错误配置!”

    exit 1

fi

 

 

 

# 备份的头部信息 

LogMsg “———————————————-” 

LogMsg “$0: MySQL 备份脚本 ”

LogMsg “———————————————-“

LogMsg “ 开始于: `date +%F’ ‘%T`” 

     

   

# 查找最新的完全备份文件夹(不包括父级目录) 

LATEST_FULL_BACKUP=`find $FULLBACKUP_DIR -mindepth 1 -maxdepth 1 -type d -printf “%P\n” | sort -nr | head -1` 

 

 

# 查找最最新全库备份时间, 日期格式:2016-07-20

LATEST_FULL_BACKUP_CREATED_DATE=`stat -c %y $FULLBACKUP_DIR/$LATEST_FULL_BACKUP | cut -c 1-10` 

 

 

# 星期一, 星期二, 星期三, 星期五, 星期六执行增量备份 

if [$WEEK_NUM -eq 1 -o $WEEK_NUM -eq 2 -o $WEEK_NUM -eq 3 -o $WEEK_NUM -eq 5 -o $WEEK_NUM -eq 6] ; then

    LogMsg  “************************************”

    LogMsg  “ 正在执行增量备份 … 请稍等 …”

    LogMsg  “************************************”

   

    #无全备时, 需先做全备

    if [-z $LATEST_FULL_BACKUP] ; then

        LogErrorMsg “ 服务器还没有做过全备份, 请根据安装文档先做一次全备!”

        exit 1

    fi

       

    # 以最新的全备目录名在增量备份目录下新建目录 

    LogMsg “ 增量备份放在 $INCRBACKUP_DIR/$LATEST_FULL_BACKUP 目录下 ” 

    NEW_INCRDIR=$INCRBACKUP_DIR/$LATEST_FULL_BACKUP 

    mkdir -p $NEW_INCRDIR 

 

    # 查找最新的增量备份是否存在. 指定一个备份的路径作为增量备份的基础 

    LATEST_INCR_BACKUP=`find $NEW_INCRDIR -mindepth 1 -maxdepth 1 -type d -printf “%P\n”  | sort -nr | head -1` 

        if [! $LATEST_INCR_BACKUP] ; then

            INCRBASEDIR=$FULLBACKUP_DIR/$LATEST_FULL_BACKUP 

            LogMsg “ 增量备份将以 $INCRBASEDIR 备份集作为备份基础 ” 

        else

            INCRBASEDIR=$INCRBACKUP_DIR/$LATEST_FULL_BACKUP/$LATEST_INCR_BACKUP

            LogMsg “ 增量备份将以 $INCRBASEDIR 备份集作为备份基础 ”

        fi

   

    $INNOBACKUPEX –defaults-file=$MY_CNF $MYSQL_CMD –incremental $NEW_INCRDIR –incremental-basedir $INCRBASEDIR > $TMP_LOG 2>&1 

    check_innobackupex_fail

 

    LogMsg “ 数据库成功增量备份到:$NEW_INCRDIR”

   

# 星期四, 星期日执行全量备份

elif [$WEEK_NUM -eq 0 -o $WEEK_NUM -eq 4] ; then

    LogMsg  “************************************”

    LogMsg  “ 正在执行全新的完全备份 … 请稍等 …”

    LogMsg  “************************************”

   

    $INNOBACKUPEX –defaults-file=$MY_CNF $MYSQL_CMD $FULLBACKUP_DIR> $TMP_LOG 2>&1 

    check_innobackupex_fail

 

    LogMsg “ 数据库成功全量备份到:$FULLBACKUP_DIR” 

fi

 

 

# 删除过期的全量备份以及增量备份, 过期时间为 7 天

 

LogMsg “ 寻找过期的备份文件 … 请稍等 …” 

 

EXPIRE_FILE=`find $FULLBACKUP_DIR/ -mindepth 1 -maxdepth 1 -type d -mtime +7 -printf “%P\t” `

 

if [-z “$EXPIRE_FILE”];then 

    LogMsg “ 未找到可以删除的过期备份文件 ”

else

    for efile in `find $FULLBACKUP_DIR/ -mindepth 1 -maxdepth 1 -type d -mtime +7 -printf “%P\n”`

    do

        LogMsg “ 删除过期全备文件:$efile”

        rm -rf $FULLBACKUP_DIR/$efile

        LogMsg “ 删除过期增量备份文件:$efile”

        rm -rf $INCRBACKUP_DIR/$efile 

    done

fi

     

LogSucMsg “ 备份完成于: `date +%F’ ‘%T’ ‘`”

exit 0 

更多 XtraBackup 相关教程见以下内容

MySQL 管理之使用 XtraBackup 进行热备 http://www.linuxidc.com/Linux/2014-04/99671.htm

MySQL 开源备份工具 Xtrabackup 备份部署 http://www.linuxidc.com/Linux/2013-06/85627.htm

MySQL Xtrabackup 备份和恢复 http://www.linuxidc.com/Linux/2011-12/50275.htm

用 XtraBackup 实现 MySQL 的主从复制快速部署【主不锁表】http://www.linuxidc.com/Linux/2012-10/71919p2.htm

安装和使用 Percona 推出的 Xtrabackup 备份 MySQL http://www.linuxidc.com/Linux/2011-10/44451.htm

XtraBackup 的详细��绍:请点这里
XtraBackup 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-08/134465.htm 

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计5084字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中