xtrabackup 增量,全量备数据库脚本

#!/bin/sh
#xtrabackup备份脚本
#获取脚本所存放目录
cd `dirname $0`
bash_path=`pwd`
#脚本名
me=$(basename $0)

#定义变量
LOG=/var/log/mysql_backup.log
DATE=$(date +%F)
DATE1=$(date +%H)
LASTDATE=$(date -d "yesterday" +%F)
MYCONF="/etc/my.cnf"
PASSWD=$(cat /data/save/mysql_root)
BACK_FILE_DIR="/data/backups/database"
EMAIL=("yunwei@xxx.com")
BACK_SERVER="172.16.1.12"
BACK_SERVER_DIR="/home/mysqlbackup"
ssh_port="22"
ssh_parameters="-o StrictHostKeyChecking=no -o ConnectTimeout=60"
ssh_command="ssh ${ssh_parameters} -p ${ssh_port}"
scp_command="scp ${ssh_parameters} -P ${ssh_port}"

#定义保存日志函数
function save_log () {
    echo -e "[`date +%F\ %T`]   $*" >> $LOG
}

#定义发送邮件函数
function send_mail () {
    echo "$*" |mail -s "[mysql `date +%F\ %T` ]" ${EMAIL[@]}
}

save_log "start $0"

#定义数据库多实例对应的socket,备份的文件夹名称,对应的端口,主机名,对应的mysqldgroup
case $1 in
                trade)
                        SOCKET=/tmp/mysql_3306.sock
                        FILENAME=trade
                        PORT=3306
                        HOST=S-C9
                        MYSQLD_GROUP=mysqld1
                ;;
                product)
                        SOCKET=/tmp/mysql_3307.sock
                        FILENAME=product
                        PORT=3307
                        HOST=S-C9
                        MYSQLD_GROUP=mysqld2
                ;;
        user)
                        SOCKET=/tmp/mysql_3308.sock
                        FILENAME=user
                        PORT=3308
                        HOST=S-C9
                        MYSQLD_GROUP=mysqld3
                ;;

                bbs)
                        SOCKET=/tmp/mysql_3306.sock
                        FILENAME=bbs
                        PORT=3306
                        HOST=S-C11
                        MYSQLD_GROUP=mysqld1
                ;;
                excess)
                        SOCKET=/tmp/mysql_3307.sock
                        FILENAME=excess
                        PORT=3307
                        HOST=S-C11
                        MYSQLD_GROUP=mysqld2
                ;;
                sc)
                        SOCKET=/tmp/mysql_3308.sock
                        FILENAME=sc
                        PORT=3308
                        HOST=S-C11
                        MYSQLD_GROUP=mysqld3
                ;;
                cms)
                        SOCKET=/tmp/mysql_3306.sock
                        FILENAME=cms
                        PORT=3306
                        HOST=S-C12
                        MYSQLD_GROUP=mysqld1
                ;;
                act)
                        SOCKET=/tmp/mysql_3307.sock
                        FILENAME=act
                        PORT=3307
                        HOST=S-C12
                        MYSQLD_GROUP=mysqld2
                ;;
                market)
                        SOCKET=/tmp/mysql_3308.sock
                        FILENAME=market
                        PORT=3308
                        HOST=S-C12
                        MYSQLD_GROUP=mysqld3
                ;;
        esac
#}

#创建目录
[ ! -d "${BACK_FILE_DIR}/${FILENAME}/${DATE}" ] && mkdir -p ${BACK_FILE_DIR}/${FILENAME}/${DATE}

function xtrabackup_backup () {
    NEW_DIR=$(ls -l ${BACK_FILE_DIR}/${FILENAME}/${DATE} | tail -n 1 | awk '{print $9}')
    LASTNEW_DIR=$(ls -l ${BACK_FILE_DIR}/${FILENAME}/${LASTDATE} | tail -n 1 | awk '{print $9}')
  #备份失败操作
  function backup_failed_operation () {
    NEW_DIR1=$(ls -l ${BACK_FILE_DIR}/${FILENAME}/${DATE} | tail -n 1 | awk '{print $9}')
    LASTNEW_DIR1=$(ls -l $${BACK_FILE_DIR}/${FILENAME}/${LASTDATE} | tail -n 1 | awk '{print $9}')
  #备份失败发送邮件
    if [ $DATE1 -eq 03 ] ;then
    save_log "${FILENAME} full-backup failed"
    send_mail "
Server:${HOST}
Port:${PORT}
DB:${FILENAME}
PATH:${BACK_FILE_DIR}/${FILENAME}/${DATE}/
full-backup-failed"
    else
    save_log "${FILENAME} incremental-backup failed"
    send_mail "
Server:${HOST}
Port:${PORT}
DB:${FILENAME}
PATH:${BACK_FILE_DIR}/${FILENAME}/${DATE}/
incremental-backup-failed"
    fi
    #删除昨天备份备份文件夹里面备份失败的文件夹
    if [ $DATE1 -ge 00 ] && [ $DATE1 -le 02 ] ;then
    rm -rf ${BACK_FILE_DIR}/${FILENAME}/${LASTDATE}/$LASTNEW_DIR1
    #删除今天备份备份文件夹里面备份失败的文件夹
    else
    rm -rf ${BACK_FILE_DIR}/${FILENAME}/${DATE}/$NEW_DIR1
    fi
    exit 1
  }
    #增量备份
  if [ $DATE1 -ge 04 ] && [ $DATE1 -le 23 ] ;then
    innobackupex --defaults-file=${MYCONF} --user=root --password=${PASSWD} --defaults-group=${MYSQLD_GROUP} --socket=${SOCKET} --incremental-basedir=${BACK_FILE_DIR}/${FILENAME}/${DATE}/$NEW_DIR --incremental ${BACK_FILE_DIR}/${FILENAME}/${DATE}
    [ $? -eq 0 ] && save_log "${FILENAME} incremental-backup successed" || backup_failed_operation
  elif [ $DATE1 -ge 00 ] && [ $DATE1 -le 02 ] ;then
    innobackupex --defaults-file=${MYCONF} --user=root --password=${PASSWD} --defaults-group=${MYSQLD_GROUP} --socket=${SOCKET} --incremental-basedir=${BACK_FILE_DIR}/${FILENAME}/${LASTDATE}/$LASTNEW_DIR --incremental ${BACK_FILE_DIR}/${FILENAME}/${LASTDATE}
    [ $? -eq 0 ] && save_log "${FILENAME} incremental-backup successed" || backup_failed_operation
  else
    #全量备份
    innobackupex --defaults-file=${MYCONF} --user=root --password=${PASSWD} --defaults-group=${MYSQLD_GROUP} --socket=${SOCKET} ${BACK_FILE_DIR}/${FILENAME}/${DATE}
    [ $? -eq 0 ] && save_log "${FILENAME} full-backup successed" || backup_failed_operation
    #压缩打包
    cd ${BACK_FILE_DIR}/${FILENAME}/
    tar -zcvf $LASTDATE.tgz $LASTDATE
    #在远程服务器创建文件夹
    $ssh_command root@${BACK_SERVER} "mkdir -p ${BACK_SERVER_DIR}/${FILENAME}/"
    #在远程服务器删除30天之前的文件 
    $ssh_command root@${BACK_SERVER} "find ${BACK_SERVER_DIR}/${FILENAME}/ -mtime +30 -type f -exec rm -rf {} \;"
    #传输到远程服务器备份
    rsync -avz -e "${ssh_command}" ${BACK_FILE_DIR}/${FILENAME}/$LASTDATE.tgz root@${BACK_SERVER}:${BACK_SERVER_DIR}/${FILENAME}/
    [ $? -eq 0 ] && save_log "${FILENAME} rsync successed" && rm -rf ${BACK_FILE_DIR}/${FILENAME}/${LASTDATE}* || { save_log "${FILENAME} rsync failed" ; send_mail "
Server:${HOST}
Port:${PORT}
DB:${FILENAME}
PATH:${BACK_FILE_DIR}/${FILENAME}/ 
rsync-failed" ; }
  fi

}

xtrabackup_backup

save_log "finish $0\n"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值