注意: 使用此脚本前,需要安装好 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 ~