设为首页 收藏本站
查看: 259|回复: 0

[经验分享] xtrabackup全备份+增量备份+差异备份

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-5-25 09:05:10 | 显示全部楼层 |阅读模式
1.以下是我最近完成的一个xtrabackup用于备份mysql数据库的脚本
#!/bin/bash
source /etc/profile
#定时任务可以设置成周日执行start_full全备份,然后周一至周六执行start_add增量备,每小时执行start_diff差异备份
PRG="$0"
while [ -h "$PRG" ] ; do
  ls=`ls -ld "$PRG"`
  link=`expr "$ls" : '.*-> \(.*\)$'`
  if expr "$link" : '/.*' > /dev/null; then
    PRG="$link"
  else
    PRG=`dirname "$PRG"`/"$link"
  fi
done
BASEDIR=`dirname "$PRG"`
####################################################
#授权xtrabackup用户权限如下:
#GRANT SELECT, RELOAD, SUPER, REPLICATION CLIENT ON *.* TO 'xtrabackup'@'localhost' IDENTIFIED BY '密码'
DB_USER=xtrabackup
#数据库密码文件
DB_PASSWD=`cat $BASEDIR/.passwd`
#要备份的本地数据库的端口号,配置文件以及SOCK文件
DB_PORT=32266
DB_SOCKET=/tmp/mysql.sock
DB_DEF_FILE=/etc/my.cnf
#数据库全备份保存路径
DB_BACKUP_DIR_FULL=/home/db_backup_full
#数据库增量备保存路径
DB_BACKUP_DIR_ADD=/home/db_backup_add
#数据小时增量备份保存路径
DB_BACKUP_DIR_DIFF=/home/db_backup_diff/$(date +%F)
#备份生成的日志名称
LOG_FILE=backup.log
#数据库全备的头文件名
DB_BACKUP_NAME_FULL=mysql_full
DB_BACKUP_NAME_ADD=mysql_add
TIME=$(date +%F)
TIME3=$(date -d -3day +%F)
COMM=innobackupex-1.5.1
#我这里用的是mailx,具体路径根据自己的环境调整
COMM_MAILX=/usr/src/mailx-12.4/mailx
#邮件的消息内容
MAILX_TITLE_SUCCESS='服务器数据库备份成功提醒'
MAILX_TITLE_FAILED='服务器数据库备份异常'
MAILX_TITLE_ADD_SUCCESS='数据库增量备成功提醒'
MAILX_TITLE_DIFF_SUCCESS='数据库差异备成功提醒'
MAILX_CONTENTS_ADD='数据库增量备成功,数据大小为'
MAILX_CONTENTS_DIFF='数据库差异备成功,数据大小为'
MAILX_TITLE_ADD_FAILES='数据库增量备异常提醒'
MAILX_TITLE_DIFF_FAILES='数据库差异备异常提醒'
MAILX_ADD_LSN_NO_EXSIT='增量备份的LSN没有提取出来,或者不存在'
MAILX_ADD_LSN_NULL='增量备份的LSN为空,无法进行后续备份'
MAILX_FULL_LSN_NO_EXSIT='全备份的LSN没有提取出来,或者不存在'
MAILX_FULL_LSN_NULL='全备份的LSN为空,无法进行后续备份'
#邮件联系人列表,每行一个联系人
MAILX_CONTACTS=`cat $BASEDIR/contacts_list`
#用于获取当前小时时间
TIME_HOURS=`echo $(date +%H)`
#指定程序可以运行的时间点,例如:凌晨两点02,下午3点就写15,这样的格式来写
APPOINT_HOURS=*
APPOINT_HOURS_ADD=*
#对端远程服务器的登录用户,IP,端口号,以及用于存放备份文件的路径
SSH_USER=root
SSH_IP=192.168.10.200
SSH_PORT=2222
SSH_DIR=/mysql_backup_100
start_full () {
if [[ $UID -ne 0 ]];then
        echo "请以root身份执行该程序."
        exit 1
else
        if [[ $TIME_HOURS != $APPOINT_HOURS ]];then
        echo "程序的执行时间不对,请确认时间后重新执行."
                exit 1
        else
                if [[ -e $DB_BACKUP_DIR_FULL ]];then
                        $COMM --user=$DB_USER --password=$DB_PASSWD --port=$DB_PORT --socket=$DB_SOCKET --defaults-file=$DB_DEF_FILE --stream=tar $DB_BACKUP_DIR_FULL 2>>$DB_BACKUP_DIR_FULL/$LOG_FILE |gzip >$DB_BACKUP_DIR_FULL/$DB_BACKUP_NAME_FULL.$TIME.tar.gz
                        if [[ $? -eq 0 ]];then
                                                                BACKUP_FULL_STATUS_OK=`tail -1 $DB_BACKUP_DIR_FULL/$LOG_FILE|awk '{print $5}'`
                                                                if [[ $BACKUP_FULL_STATUS_OK = 'OK!' ]];then
                                DB_BACKUP_SIZE=`du -sh $DB_BACKUP_DIR_FULL/$DB_BACKUP_NAME_FULL.$TIME.tar.gz|awk '{print $1}'`
                                cd $DB_BACKUP_DIR_FULL
                                tar -izxvf $DB_BACKUP_NAME_FULL.$TIME.tar.gz xtrabackup_checkpoints
                                cat xtrabackup_checkpoints |grep "to_lsn"|awk '{print $3}' >./lsn.txt
                                mv xtrabackup_checkpoints xtrabackup_checkpoints.$TIME
                                echo "数据库备份成功,当前数据大小为$DB_BACKUP_SIZE."|$COMM_MAILX -s "$MAILX_TITLE_SUCCESS" $MAILX_CONTACTS
                                                                else
                                                                echo "$(date)|mysql数据库全备失败,请具体查看失败原因" >>$DB_BACKUP_DIR_FULL/$LOG_FILE.$TIME
                                                                echo "mysql数据库全备失败,请具体查看失败原因"|$COMM_MAILX -s "$MAILX_TITLE_FAILED" $MAILX_CONTACTS
                                                                exit 2
                                                                fi
                        else
                                                                echo "$(date)|程序异常退出,数据库备份失败,异常原因退出,请登录服务器查看" >>$DB_BACKUP_DIR_FULL/$LOG_FILE.$TIME
                                echo "数据库备份失败,异常原因退出,请登录服务器查看"|$COMM_MAILX -s "$MAILX_TITLE_FAILED" $MAILX_CONTACTS
                                                                exit 2
                        fi
                        echo "$(date)|数据开始转移至远程服务器" >>$DB_BACKUP_DIR_FULL/$LOG_FILE.$TIME
                                                ssh -p $SSH_PORT -o GSSAPIAuthentication=no $SSH_USER@$SSH_IP "if [[ -e '$SSH_DIR' ]];then echo "检测远程上传目录存在,将继续进行如下操作";else mkdir '$SSH_DIR';fi" >>$DB_BACKUP_DIR_FULL/$LOG_FILE.$TIME
                        scp -P $SSH_PORT -o GSSAPIAuthentication=no $DB_BACKUP_DIR_FULL/$DB_BACKUP_NAME_FULL.$TIME.tar.gz $SSH_USER@$SSH_IP:$SSH_DIR
                        if [[ $? -eq 0 ]];then
                                echo "$(date)|数据库上传至远程服务器" >>$DB_BACKUP_DIR_FULL/$LOG_FILE.$TIME
                                /bin/rm -rf $DB_BACKUP_DIR_FULL/$DB_BACKUP_NAME_FULL.$TIME.tar.gz &
                                echo "$(date)|删除临时备份文件" >>$DB_BACKUP_DIR_FULL/$LOG_FILE.$TIME
                                                                exit 0
                        else
                                echo "数据库转移失败"|$COMM_MAILX -s "数据库转移失败" $MAILX_CONTACTS
                                echo "$(date)|数据库转移失败" >>$DB_BACKUP_DIR_FULL/$LOG_FILE.$TIME
                                exit 2
                        fi
                else
                        mkdir -p $DB_BACKUP_DIR_FULL
                        $COMM --user=$DB_USER --password=$DB_PASSWD --port=$DB_PORT --socket=$DB_SOCKET --defaults-file=$DB_DEF_FILE --stream=tar $DB_BACKUP_DIR_FULL 2>$DB_BACKUP_DIR_FULL/$LOG_FILE |gzip >$DB_BACKUP_DIR_FULL/$DB_BACKUP_NAME_FULL.$TIME.tar.gz
                        if [[ $? -eq 0 ]];then
                                BACKUP_FULL_STATUS_OK=`tail -1 $DB_BACKUP_DIR_FULL/$LOG_FILE|awk '{print $5}'`
                                if [[ $BACKUP_FULL_STATUS_OK = 'OK!' ]];then
                                DB_BACKUP_SIZE=`du -sh $DB_BACKUP_DIR_FULL/$DB_BACKUP_NAME_FULL.$TIME.tar.gz|awk '{print $1}'`
                                cd $DB_BACKUP_DIR_FULL
                                tar -izxvf $DB_BACKUP_NAME_FULL.$TIME.tar.gz xtrabackup_checkpoints
                                cat xtrabackup_checkpoints |grep "to_lsn"|awk '{print $3}' >./lsn.txt
                                mv xtrabackup_checkpoints xtrabackup_checkpoints.$TIME
                                echo "数据库备份成功,当前数据大小为$DB_BACKUP_SIZE."|$COMM_MAILX -s "$MAILX_TITLE_SUCCESS" $MAILX_CONTACTS
                                                                else
                                                                echo "$(date)|mysql数据库全备失败,请具体查看失败原因" >>$DB_BACKUP_DIR_FULL/$LOG_FILE.$TIME
                                echo "mysql数据库全备失败,请具体查看失败原因"|$COMM_MAILX -s "$MAILX_TITLE_FAILED" $MAILX_CONTACTS
                                exit 2
                                fi
                        else
                                                           echo "$(date)|程序异常退出,数据库备份失败,异常原因退出,请登录服务器查看" >>$DB_BACKUP_DIR_FULL/$LOG_FILE.$TIME
                               echo "数据库备份失败,异常原因退出,请登录服务器查看"|$COMM_MAILX -s "$MAILX_TITLE_FAILED" $MAILX_CONTACTS
                               exit 2
                        fi
                        echo "$(date)|数据开始转移至远程服务器" >>$DB_BACKUP_DIR_FULL/$LOG_FILE.$TIME
                                                ssh -p $SSH_PORT -o GSSAPIAuthentication=no $SSH_USER@$SSH_IP "if [[ -e '$SSH_DIR' ]];then echo "检测远程上传目录存在,将继续进行如下操作";else mkdir '$SSH_DIR';fi" >>$DB_BACKUP_DIR_FULL/$LOG_FILE.$TIME
                        scp -P $SSH_PORT -o GSSAPIAuthentication=no $DB_BACKUP_DIR_FULL/$DB_BACKUP_NAME_FULL.$TIME.tar.gz $SSH_USER@$SSH_IP:$SSH_DIR
                        if [[ $? -eq 0 ]];then
                                echo "$(date)|数据库上传至远程服务器" >>$DB_BACKUP_DIR_FULL/$LOG_FILE.$TIME
                                /bin/rm -rf $DB_BACKUP_DIR_FULL/$DB_BACKUP_NAME_FULL.$TIME.tar.gz &
                                echo "$(date)|删除临时备份文件" >>$DB_BACKUP_DIR_FULL/$LOG_FILE.$TIME
                                                                exit 0
                        else
                                echo "数据库转移失败"|$COMM_MAILX -s "数据库转移失败" $MAILX_CONTACTS
                                echo "$(date)|数据库转移失败" >>$DB_BACKUP_DIR_FULL/$LOG_FILE.$TIME
                                exit 2
                        fi
                fi
        fi
fi

}

start_add () {
if [[ $UID -ne 0 ]];then
        echo "请以root身份执行该程序."
        exit 2
else
    if [[ $TIME_HOURS != $APPOINT_HOURS_ADD ]];then
        echo "程序的执行时间不对,请确认时间后重新执行."
        exit 2
    else
                if [[ -e $DB_BACKUP_DIR_ADD ]];then
                                if [[ -e $DB_BACKUP_DIR_ADD/lsn.txt ]];then
                                        if [[ -s $DB_BACKUP_DIR_ADD/lsn.txt ]];then
                        WC_LSN_COUNTS=`wc -l $DB_BACKUP_DIR_ADD/lsn.txt|awk '{print $1}'`
                        if [[ $WC_LSN_COUNTS -ge 1 ]]&&[[ $WC_LSN_COUNTS -le 4 ]];then
                            LSN=`tail -1 $DB_BACKUP_DIR_ADD/lsn.txt`
                            $COMM --user=$DB_USER --password=$DB_PASSWD --port=$DB_PORT --socket=$DB_SOCKET --defaults-file=$DB_DEF_FILE --incremental --incremental-lsn=$LSN $DB_BACKUP_DIR_ADD 2>>$DB_BACKUP_DIR_ADD/$LOG_FILE
                                                        if [[ $? -eq 0 ]];then
                                                                BACKUP_ADD_STATUS_OK=`tail -1 $DB_BACKUP_DIR_ADD/$LOG_FILE|awk '{print $5}'`
                                                                if [[ $BACKUP_ADD_STATUS_OK = 'OK!' ]];then
                                find $DB_BACKUP_DIR_ADD -type f -mmin -1 -name "xtrabackup_checkpoints" -exec cat {} \;|grep to_lsn|awk '{print $3}' >>$DB_BACKUP_DIR_ADD/lsn.txt
                                                                DATA_ADD_SIZE=`find $DB_BACKUP_DIR_ADD -type d -mmin -1 -name "$(date +%F_*)" -exec du -sh {} \;|awk '{print $1}'`
                                                                echo "$MAILX_CONTENTS_ADD,$DATA_ADD_SIZE"|$COMM_MAILX -s "$MAILX_TITLE_ADD_SUCCESS" $MAILX_CONTACTS
                                                                else
                                                                echo "$(date)|mysql数据库增量备失败,请具体查看失败原因" >>$DB_BACKUP_DIR_ADD/$LOG_FILE.$TIME
                                                                echo "mysql数据库增量备失败,请具体查看失败原因"|$COMM_MAILX -s "$MAILX_TITLE_ADD_FAILES" $MAILX_CONTACTS
                                                                exit 2
                                                                fi
                                                        else
                                                                echo "$(date)|程序异常退出,mysql数据库增量备失败,请具体查看失败原因" >>$DB_BACKUP_DIR_ADD/$LOG_FILE.$TIME
                                                                echo "程序异常退出,mysql数据库增量备失败,请具体查看失败原因"|$COMM_MAILX -s "$MAILX_TITLE_ADD_FAILES" $MAILX_CONTACTS
                                                                exit 2
                                                        fi
                        elif [[ $WC_LSN_COUNTS -eq 5 ]];then
                                                        LSN=`tail -1 $DB_BACKUP_DIR_ADD/lsn.txt`
                            $COMM --user=$DB_USER --password=$DB_PASSWD --port=$DB_PORT --socket=$DB_SOCKET --defaults-file=$DB_DEF_FILE --incremental --incremental-lsn=$LSN $DB_BACKUP_DIR_ADD 2>>$DB_BACKUP_DIR_ADD/$LOG_FILE
                                                        if [[ $? -eq 0 ]];then
                                BACKUP_ADD_STATUS_OK=`tail -1 $DB_BACKUP_DIR_ADD/$LOG_FILE|awk '{print $5}'`
                                if [[ $BACKUP_ADD_STATUS_OK = 'OK!' ]];then
                                                                        mv $DB_BACKUP_DIR_ADD/lsn.txt $DB_BACKUP_DIR_ADD/lsn_backup.$TIME
                                                                        DATA_ADD_SIZE=`find $DB_BACKUP_DIR_ADD -type d -mmin -1 -name "$(date +%F_*)" -exec du -sh {} \;|awk '{print $1}'`
                                                                        echo "$MAILX_CONTENTS_ADD,$DATA_ADD_SIZE"|$COMM_MAILX -s "$MAILX_TITLE_ADD_SUCCESS" $MAILX_CONTACTS
                                else
                                                                        echo "$(date)|mysql数据库增量备失败,请具体查看失败原因" >>$DB_BACKUP_DIR_ADD/$LOG_FILE.$TIME
                                                                        echo "mysql数据库增量备失败,请具体查看失败原因"|$COMM_MAILX -s "$MAILX_TITLE_ADD_FAILES" $MAILX_CONTACTS
                                                                        exit 2
                                fi
                                                        else
                                                                echo "$(date)|程序异常退出,mysql数据库增量备失败,请具体查看失败原因" >>$DB_BACKUP_DIR_ADD/$LOG_FILE.$TIME
                                                                echo "程序异常退出,mysql数据库增量备失败,请具体查看失败原因"|$COMM_MAILX -s "$MAILX_TITLE_ADD_FAILES" $MAILX_CONTACTS
                                                                exit 2
                                                        fi
                                                else
                                                        echo "未定义" 2>>$DB_BACKUP_DIR_ADD/$LOG_FILE.$TIME
                                                        exit 2
                                                fi
                    else
                                                #增量备份的LSN为空,无法进行后续备份
                        echo "$(date)|$MAILX_ADD_LSN_NULL" >>$DB_BACKUP_DIR_ADD/$LOG_FILE.$TIME
                                                echo "$MAILX_ADD_LSN_NULL"|$COMM_MAILX -s "$MAILX_TITLE_ADD_FAILES" $MAILX_CONTACTS
                        exit 2
                    fi
                                else
                                        if [[ -e $DB_BACKUP_DIR_FULL/lsn.txt ]];then
                                                if [[ -s $DB_BACKUP_DIR_FULL/lsn.txt ]];then
                                                        LSN=`tail -1 $DB_BACKUP_DIR_FULL/lsn.txt`
                                                        $COMM --user=$DB_USER --password=$DB_PASSWD --port=$DB_PORT --socket=$DB_SOCKET --defaults-file=$DB_DEF_FILE --incremental --incremental-lsn=$LSN $DB_BACKUP_DIR_ADD 2>>$DB_BACKUP_DIR_ADD/$LOG_FILE
                                                        if [[ $? -eq 0 ]];then
                            BACKUP_ADD_STATUS_OK=`tail -1 $DB_BACKUP_DIR_ADD/$LOG_FILE|awk '{print $5}'`
                            if [[ $BACKUP_ADD_STATUS_OK = 'OK!' ]];then                                                       
                                                                find $DB_BACKUP_DIR_ADD -type f -mmin -1 -name "xtrabackup_checkpoints" -exec cat {} \;|grep to_lsn|awk '{print $3}' >>$DB_BACKUP_DIR_ADD/lsn.txt
                                                                DATA_ADD_SIZE=`find $DB_BACKUP_DIR_ADD -type d -mmin -1 -name "$(date +%F_*)" -exec du -sh {} \;|awk '{print $1}'`
                                                                echo "$MAILX_CONTENTS_ADD,$DATA_ADD_SIZE"|$COMM_MAILX -s "$MAILX_TITLE_ADD_SUCCESS" $MAILX_CONTACTS
                            else
                                                                echo "$(date)|mysql数据库增量备失败,请具体查看失败原因" >>$DB_BACKUP_DIR_ADD/$LOG_FILE.$TIME
                                                                echo "mysql数据库增量备失败,请具体查看失败原因"|$COMM_MAILX -s "$MAILX_TITLE_ADD_FAILES" $MAILX_CONTACTS
                                                                exit 2
                            fi
                                                        else
                                                                echo "$(date)|程序异常退出,mysql数据库增量备失败,请具体查看失败原因" >>$DB_BACKUP_DIR_ADD/$LOG_FILE.$TIME
                                                                echo "程序异常退出,mysql数据库增量备失败,请具体查看失败原因"|$COMM_MAILX -s "$MAILX_TITLE_ADD_FAILES" $MAILX_CONTACTS
                                                                exit 2
                                                        fi                                                       
                                                  
                                                else
                                                        #全备份的LSN为空,无法进行后续备份
                                                        echo "$(date)|$MAILX_FULL_LSN_NULL" >>$DB_BACKUP_DIR_ADD/$LOG_FILE.$TIME
                                                        echo "$MAILX_FULL_LSN_NULL"|$COMM_MAILX -s "$MAILX_TITLE_ADD_FAILES" $MAILX_CONTACTS
                                                        exit 2
                                                fi
                                        else
                                                #全备份的LSN文件存在或者未提取出来,退出执行
                                                echo "$(date)|$MAILX_FULL_LSN_NO_EXSIT" >>$DB_BACKUP_DIR_ADD/$LOG_FILE.$TIME
                                                echo "$MAILX_FULL_LSN_NO_EXSIT"|$COMM_MAILX -s "$MAILX_TITLE_ADD_FAILES" $MAILX_CONTACTS
                                                exit 2
                                        fi                                       
                                fi

                else
                        mkdir -p $DB_BACKUP_DIR_ADD
                                if [[ -e $DB_BACKUP_DIR_FULL/lsn.txt ]];then
                                        if [[ -s $DB_BACKUP_DIR_FULL/lsn.txt ]];then
                                                LSN=`cat $DB_BACKUP_DIR_FULL/lsn.txt`
                                                $COMM --user=$DB_USER --password=$DB_PASSWD --port=$DB_PORT --socket=$DB_SOCKET --defaults-file=$DB_DEF_FILE --incremental --incremental-lsn=$LSN $DB_BACKUP_DIR_ADD 2>>$DB_BACKUP_DIR_ADD/$LOG_FILE
                                                if [[ $? -eq 0 ]];then
                        BACKUP_ADD_STATUS_OK=`tail -1 $DB_BACKUP_DIR_ADD/$LOG_FILE|awk '{print $5}'`
                        if [[ $BACKUP_ADD_STATUS_OK = 'OK!' ]];then       
                                                        find $DB_BACKUP_DIR_ADD -type f -mmin -1 -name "xtrabackup_checkpoints" -exec cat {} \;|grep to_lsn|awk '{print $3}' >>$DB_BACKUP_DIR_ADD/lsn.txt
                                                        DATA_ADD_SIZE=`find $DB_BACKUP_DIR_ADD -type d -mmin -1 -name "$(date +%F_*)" -exec du -sh {} \;|awk '{print $1}'`
                                                        echo "$MAILX_CONTENTS_ADD,$DATA_ADD_SIZE"|$COMM_MAILX -s "$MAILX_TITLE_ADD_SUCCESS" $MAILX_CONTACTS
                        else
                                                        echo "$(date)|mysql数据库增量备失败,请具体查看失败原因" >>$DB_BACKUP_DIR_ADD/$LOG_FILE.$TIME
                                                        echo "mysql数据库增量备失败,请具体查看失败原因"|$COMM_MAILX -s "$MAILX_TITLE_ADD_FAILES" $MAILX_CONTACTS
                                                        exit 2
                                                fi
                                                else
                                                        echo "$(date)|程序异常退出,mysql数据库增量备失败,请具体查看失败原因" >>$DB_BACKUP_DIR_ADD/$LOG_FILE.$TIME
                                                        echo "程序异常退出,mysql数据库增量备失败,请具体查看失败原因"|$COMM_MAILX -s "$MAILX_TITLE_ADD_FAILES" $MAILX_CONTACTS
                                                        exit 2
                                                fi                                               
                                               
                                        else
                                                #全备份的LSN为空,无法进行后续备份
                                                echo "$(date)|$MAILX_FULL_LSN_NULL" >>$DB_BACKUP_DIR_ADD/$LOG_FILE.$TIME
                                                echo "$MAILX_FULL_LSN_NULL"|$COMM_MAILX -s "$MAILX_TITLE_ADD_FAILES" $MAILX_CONTACTS
                                                exit 2
                                        fi
                                else
                                        #全备份的LSN文件存在或者未提取出来,退出执行
                                        echo "$(date)|$MAILX_FULL_LSN_NO_EXSIT" >>$DB_BACKUP_DIR_ADD/$LOG_FILE.$TIME
                                        echo "$MAILX_FULL_LSN_NO_EXSIT"|$COMM_MAILX -s "$MAILX_TITLE_ADD_FAILES" $MAILX_CONTACTS
                                        exit 2
                                fi                                       
                fi
        fi
fi
}

start_diff () {
if [[ $UID -ne 0 ]];then
        echo "请以root身份执行该程序."
        exit 2
else
        if [[ -e $DB_BACKUP_DIR_DIFF ]];then
                if [[ -e $DB_BACKUP_DIR_FULL/lsn.txt ]];then
                        if [[ -s $DB_BACKUP_DIR_FULL/lsn.txt ]];then
                                LSN=`tail -1 $DB_BACKUP_DIR_FULL/lsn.txt`
                                $COMM --user=$DB_USER --password=$DB_PASSWD --port=$DB_PORT --socket=$DB_SOCKET --defaults-file=$DB_DEF_FILE --incremental --incremental-lsn=$LSN --stream=xbstream $DB_BACKUP_DIR_DIFF >$DB_BACKUP_DIR_DIFF/diff_$(date +%F:%H:%M:%S).xbstream 2>>$DB_BACKUP_DIR_DIFF/$LOG_FILE
                                if [[ $? -eq 0 ]];then
                                BACKUP_STATUS_OK=`tail -1 $DB_BACKUP_DIR_DIFF/$LOG_FILE|awk '{print $5}'`
                if [[ $BACKUP_STATUS_OK = 'OK!' ]];then
                                        DATA_DIFF_SIZE=`find $DB_BACKUP_DIR_DIFF -type f -mmin -1 -name "diff_$(date +%F):*" -exec du -sh {} \;|awk '{print $1}'`
                                        echo "$MAILX_CONTENTS_DIFF,$DATA_DIFF_SIZE"|$COMM_MAILX -s "$MAILX_TITLE_DIFF_SUCCESS" $MAILX_CONTACTS
                                else
                                        echo "$(date)|mysql数据库差异备份失败,请具体查看失败原因" >>$DB_BACKUP_DIR_DIFF/$LOG_FILE.$TIME
                                        echo "mysql数据库差异备份失败,请具体查看失败原因"|$COMM_MAILX -s "$MAILX_TITLE_DIFF_FAILED" $MAILX_CONTACTS
                                        exit 2
                fi
                                else
                                        echo "$(date)|程序异常退出,mysql数据库差异备份失败,请具体查看失败原因" >>$DB_BACKUP_DIR_DIFF/$LOG_FILE.$TIME
                                        echo "程序异常退出,mysql数据库差异备份失败,请具体查看失败原因"|$COMM_MAILX -s "$MAILX_TITLE_DIFF_FAILED" $MAILX_CONTACTS
                                        exit 2
                                fi
                        else
                                #全备份的LSN为空,无法进行后续备份
                                echo "$(date)|$MAILX_FULL_LSN_NULL" >>$DB_BACKUP_DIR_ADD/$LOG_FILE.$TIME
                                echo "$MAILX_FULL_LSN_NULL"|$COMM_MAILX -s "$MAILX_TITLE_ADD_FAILES" $MAILX_CONTACTS
                                exit 2
                        fi
                else
                        #全备份的LSN文件存在或者未提取出来,退出执行
                        echo "$(date)|$MAILX_FULL_LSN_NO_EXSIT" >>$DB_BACKUP_DIR_ADD/$LOG_FILE.$TIME
                        echo "$MAILX_FULL_LSN_NO_EXSIT"|$COMM_MAILX -s "$MAILX_TITLE_ADD_FAILES" $MAILX_CONTACTS
                        exit 2
                fi
        else
                mkdir -p $DB_BACKUP_DIR_DIFF
                if [[ -e $DB_BACKUP_DIR_FULL/lsn.txt ]];then
                        if [[ -s $DB_BACKUP_DIR_FULL/lsn.txt ]];then
                                LSN=`tail -1 $DB_BACKUP_DIR_FULL/lsn.txt`
                                $COMM --user=$DB_USER --password=$DB_PASSWD --port=$DB_PORT --socket=$DB_SOCKET --defaults-file=$DB_DEF_FILE --incremental --incremental-lsn=$LSN --stream=xbstream $DB_BACKUP_DIR_DIFF >$DB_BACKUP_DIR_DIFF/diff_$(date +%F:%H:%M:%S).xbstream 2>>$DB_BACKUP_DIR_DIFF/$LOG_FILE
                                if [[ $? -eq 0 ]];then
                                BACKUP_STATUS_OK=`tail -1 $DB_BACKUP_DIR_DIFF/$LOG_FILE|awk '{print $5}'`
                                if [[ $BACKUP_STATUS_OK = 'OK!' ]];then
                                        DATA_DIFF_SIZE=`find $DB_BACKUP_DIR_DIFF -type f -mmin -1 -name "diff_$(date +%F):*" -exec du -sh {} \;|awk '{print $1}'`
                                        echo "$MAILX_CONTENTS_DIFF,$DATA_DIFF_SIZE"|$COMM_MAILX -s "$MAILX_TITLE_DIFF_SUCCESS" $MAILX_CONTACTS
                                else
                                        echo "$(date)|mysql数据库差异备份失败,请具体查看失败原因" >>$DB_BACKUP_DIR_DIFF/$LOG_FILE.$TIME
                                        echo "mysql数据库差异备份失败,请具体查看失败原因"|$COMM_MAILX -s "$MAILX_TITLE_DIFF_FAILED" $MAILX_CONTACTS
                                        exit 2
                fi
                                else
                                        echo "$(date)|程序异常退出,mysql数据库差异备份失败,请具体查看失败原因" >>$DB_BACKUP_DIR_DIFF/$LOG_FILE.$TIME
                                        echo "程序异常退出,mysql数据库差异备份失败,请具体查看失败原因"|$COMM_MAILX -s "$MAILX_TITLE_DIFF_FAILED" $MAILX_CONTACTS
                                        exit 2
                                fi
                        else
                                #全备份的LSN为空,无法进行后续备份
                                echo "$(date)|$MAILX_FULL_LSN_NULL" >>$DB_BACKUP_DIR_ADD/$LOG_FILE.$TIME
                                echo "$MAILX_FULL_LSN_NULL"|$COMM_MAILX -s "$MAILX_TITLE_ADD_FAILES" $MAILX_CONTACTS
                                exit 2
                        fi
                else
                        #全备份的LSN文件存在或者未提取出来,退出执行
                        echo "$(date)|$MAILX_FULL_LSN_NO_EXSIT" >>$DB_BACKUP_DIR_ADD/$LOG_FILE.$TIME
                        echo "$MAILX_FULL_LSN_NO_EXSIT"|$COMM_MAILX -s "$MAILX_TITLE_ADD_FAILES" $MAILX_CONTACTS
                        exit 2
                fi
        fi
fi
}

case $1 in
start_full)
start_full &
;;
start_add)
start_add &
;;
start_diff)
start_diff &
;;
*)
echo "USAGE $0 start_full|start_add|start_diff的方式启动全备份和增量备份差异备份,不能同时进行"
esac

以上是脚本的内容,将此写入到xtrabackup.sh的文件中,然后赋予执行权限chmod +x xtrabackup.sh,放置到一个目录

2.然后在脚本的目录里面还要创建.passwd和contacts_list两个文件,用于存放数据库的密码和邮件联系人名单

3.全部完成以后即可执行测试
例如:我的环境是/home/xtrabackup/xtrabackup.sh
全备份:/home/xtrabackup/xtrabackup.sh start_full
增量备:/home/xtrabackup/xtrabackup.sh start_add
差异备:/home/xtrabackup/xtrabackup.sh start_diff



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-70320-1-1.html 上篇帖子: mysql备份之备份方法详解 下篇帖子: mysql主主互备架构
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表