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设置为数据源,制作报表和日期等字段的筛选

填写数据库信息 保存连接



image-20230808221743547最终效果

image-202308082219357416、监控报警推送至企业微信

增加监控规则

我定义的规则是数据库back_state字段为失败时 就会触发报警


image-20230808222046843
image-20230808222113663
image-20230808222148998

image-20230808222238103
image-20230808222348313

这里可以引入美化的模板 这里不多讲了