注意: 使用此脚本前,需要安装好 XtraBackup 工具。


#!/bin/bash
# Description:用于对 MySQL 数据库数据进行全量备份操作。
#              备份方式采用 XtraBackup 工具进行物理热备。

# 钉钉报警函数
# token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   #测试报警群

FUN_DINGDING() {
    local DINGDING_TEXT="## **报警** @18856489168\n\n --- \n\n MySQL数据库备份问题: \n\n > $1 \n\n --- \n\n 备份/压缩文件为: \n\n > $2 \n\n --- \n\n ###### $DATE2 | FROM: $HOST_IP"
    # 发送告警到测试报警群
    curl 'https://oapi.dingtalk.com/robot/send?access_token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' -H 'Content-Type: application/json' -d '{"msgtype":"markdown","markdown":{"title":"报警","text":'"'$DINGDING_TEXT'"' },"at":{"atMobiles":["18856489168"],"isAtAll":false}}'
}

# 判断命令执行结果函数
Cmd_Execute_Judgment() {
    if [ $? -eq 0 ]; then
        echo -e "\n${1}\t${3}"
        # local TEXT=`echo $1 | sed -r 's@[[:space:]]+@_@g'`
        # local FILE="$3"
        # FUN_DINGDING $TEXT $FILE
    else
        echo -e "\n${2}\t${3}"
        local TEXT=`echo $2 | sed -r 's@[[:space:]]+@_@g'`
        local FILE="$3"
        FUN_DINGDING $TEXT $FILE
        exit 1
    fi
}

DATE1=`date +%F_%H-%M-%S`
DATE2=`date "+%H:%M:%S %F"`
HOST_IP=`ip a s eth0 | awk -F'[ /]*' 'NR==3{print $3}'`

DBUser='bkpdbuser'
DBPass='bkpdbpass'
DBHost='10.0.1.51'
DBPort='3306'
Mysql_Conf='/etc/my.cnf'

Back_Dir='/data/backup/mysql-backup'
Back_File="mysql-prod_full_${DATE1}"
Back_File_Gz="${Back_File}.tar.gz"

[ -d $Back_Dir ] || mkdir -p $Back_Dir
sleep 3

# 数据库全量备份操作
echo -e "\n++++++++++++++++++++++++++++++++开始全量备份 MySQL 数据库++++++++++++++++++++++++++++++++\n"
innobackupex --defaults-file=$Mysql_Conf --user=$DBUser --password=$DBPass --host=$DBHost --port=$DBPort --no-timestamp ${Back_Dir}/${Back_File}
Cmd_Execute_Judgment "MySQL full backup succeeded !" "MySQL full backup failed !!!" "$Back_File"
sleep 3

# 对备份数据进行压缩
echo -e "\n++++++++++++++++++++++++++++++++开始对备份文件进行压缩打包++++++++++++++++++++++++++++++++\n"
cd $Back_Dir
tar zcvf $Back_File_Gz $Back_File
Cmd_Execute_Judgment "MySQL full backup file compression completed OK !" "MySQL full backup file compression failed !!!" "$Back_File_Gz"
rm -rf $Back_File
cd ~