数据库备份可视化 备份失败报警
0、前提
由于数据库备份依赖于脚本+定时任务,疏忽了备份文件的真实性和可用性,有可能脚本跑了但实际的备份文件并没有生成;服务器数量太多,也不能每天依次对数据库备份文件和脚本的执行情况进行巡查,由于网络上有限制,从逻辑上功能进行改造:
改造前:数据库备份脚本->crontab定时任务
改造后:数据库备份脚本->脚本生成sql文件->crontab定时任务->线上服务器推送指定汇总服务器-> 本地服务器拉取各地区汇总sql->脚本导入本地数据库 ->形成可视化监控报表->监控报警推送至企业微信
1、数据库备份脚本
利用mysqldump和crontab备份
#!/bin/bash
#需要在my.cnf加入
#[mysqldump]
#user=root
#password=123456
source /etc/profile
##在变量中输入需备份的库名
data[1]="information_schema"
data[2]="mysql"
##在变量中输入备份存放绝对路径
bakdir="/data/databackup/MYSQL_DATA_BAK"
############################################
############################################
time=`date '+%Y%m%d'`
mkdir -p ${bakdir}/${time}
#循环加载变量
for g in ${data[@]}
do
mysqldump --set-gtid-purged=off --skip-opt --create-options --single-transaction -R -q --events --triggers --databases ${g} | gzip > ${bakdir}/${time}/${g}-sqlbak.gz
done
#zip打包删除源文件
cd ${bakdir}
zip -r -q -m ${time}-sqlbak.zip ${time}
#删除7天前zip文件
find ${bakdir} -name "*zip" -mtime +7 -exec rm -rf {} \;
2、脚本生成sql文件
将备份的统计记录转换为sql格式,便于后面统一汇总至总sql里
#!/bin/bash
AREA=xxx地区
REGION=xxx项目
DATE=$(date +%Y%m%d)
IP=xxx.xxx.xxx.xxx
FILE_DIR=/data/databackup/MYSQL_DATA_BAK/
FILE_NAME="$DATE-sqlbak.zip"
FILE=${FILE_DIR}${FILE_NAME}
SIZE=`ls -lh $FILE|awk '{print $5}'`
if [ ! -f "$FILE" ];
then
STATE="失败"
OTHER="0"
else
STATE="成功"
OTHER="1"
fi
cat > $FILE_DIR/$IP.txt <<EOF
INSERT INTO \`backup_check\`.\`check\`(\`back_time\`, \`back__ip\`, \`back_route\`, \`back_state\`, \`back_size\`, \`back_area\`, \`back_region\`, \`back_other\`) VALUES ('$DATE', '$IP', '$FILE', '$STATE', '$SIZE', '$AREA','$REGION', '$OTHER');
EOF
# 线上服务器推送指定汇总服务器
# 提前做好ssh免密:ssh-keygen -t rsa
scp -P2202 $FILE_DIR$IP.txt 10.252.32.66:/data/backup_check
3、本地服务器拉取各地区汇总sql
根据需求选择是否使用这个步骤,网络通的情况可以不实用
网络不通或开放固定端口,需要开发下载文件接口,可使用工具:magicapi
# 下载后的文件地址:/data/backup_check/m.sql
curl --request GET --url 'http://xxx.xxx.xxx.xxx:8081/agent/ops/file/down?fpath=/data/backup_check/m.sql&name=m.sql' > /data/backup_check/m.sql --header 'Authorization: Basic cltcGxlOlNpbXBsZUAyMDIyIQ=='
4、脚本导入本地数据库
#可以先将各地收集的sql汇总
cat 1.sql 2.sql 3.sql > all.sql
# 导入数据库
mysql -uroot -p1234 -D backup_check < /data/backup_check/all.sql
5、形成可视化监控报表
在grafana将mysql设置为数据源,制作报表和日期等字段的筛选
填写数据库信息 保存连接
最终效果
6、监控报警推送至企业微信
增加监控规则
我定义的规则是数据库back_state字段为失败时 就会触发报警
这里可以引入美化的模板 这里不多讲了
评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果