每周一坑-【3月第1周】
每周一坑-【3月第1周】
以后打算开个专题叫每周一坑,有坑就写,哈哈哈~~当然今天写的不止一坑,是两坑 = =。都是这周发生的
一、备份脚本没跑月备份
这个事是昨天发现的,额,月备份的目录发现没了好几个月的数据(悄悄滴不要说出去,天知地知我知 / _ \)。
没有备份主要集中是两个原因:
(1)多手调了定时脚本的时间:例如,明明每晚0点0分跑的,调到3分跑,傻不拉几地,还不相应地改脚本对应的备份逻辑!!!(所谓牵一发而动全身就是这个道理了)
(2)没调过定时脚本,但是备份逻辑有问题呀
针对第(2)种情况,我说说什么回事
话说脚本是这样的(只摘录有问题部分):
#!/bin/bash Date=`date +%Y%m%d_%H%M` DumpFile=$Date.sql ###日备份(没问题) $my_sql/mysqldump -h $ipaddr -P $port -u$username -p$password --set-gtid-purged=OFF 某数据库 > $BakDir/某数据库_$DumpFile ###月备份(逻辑有问题) #保留月初第1天第一份数据(xx年x月01日0点0分) day=`date +%d` hm=`date +%H%M` if [[ $day == 01 ]] && [[ $hm == 0000 ]] ; then cp ${BakDir}/某数据库_$DumpFile ${db_month_bak}/某数据库/ fi
日备份目录:
备份出来的文件是:数据库_20210301_0000.sql(大小为2G多)
因为太大了,需要2分钟才备份出来,所以时间显示:00:02
月备份算出来的变量 hm是匹配不了 0000 的 !!!dump大数据出来你以为不需要时间么,这种判断逻辑只能针对在1分钟内备份出来的情况,也就是数据库比较小的情况,不然数据一大就GG了 !!!
解决:
两个方法选其一即可:
1、月备份的hm位置不需要调整
在日备份截取Date的时分两位,即
Date=`date +%Y%m%d_%H%M`
后面的月备份hm写成
hm=`echo $Date | awk -F'_' '{print $2}'`
2、月备份的hm位置需要调整
月备份的hm变量写到上面日备份的mysqldump前
二、钉钉报警失效
这个是今天发现的。因为要分数据备份到不同nas上,调整脚本数据库备份路径的时候,发现钉钉不报警了。我们每天,每次备份完都会发钉钉通知的
问题+解决
(1)明明写了电话,钉钉发消息不@我
解决:
"atMobiles": [ "'${PHONE}'" ],
红色的"'" 之前是没有的,导致没读到电话这个变量
(2)挂载了第2块nas 硬盘,添加报警使用信息之后,不发告警
解决:
grep -w "/data"
原来写的是 grep "/data"
第1块硬盘挂的本地目录是 /data,我为了方便,第2块nas挂的目录就叫 /data1 好了
想不到有潜在风险,这个是我打印运行脚本信息的时候显示的:
1.0T 这个为啥显示2次?????
手动查发现如下情况:
grep -w 才是精确匹配 /data 这个单词的,不加 w 会连 /data1都匹配了
显示正常如下:
最终,修正后的脚本是这样的:
d_t=`date +%F_%T` ### 4、查看NFS共享文件大小 ## nas1 disk_count=`df -h|grep -w "/data" |awk '{print $2}'` disk_free=`df -h|grep -w "/data" |awk '{print $4}'` disk_use=`df -h|grep -w "/data" |awk '{print $3}'` ### nas2 disk1_count=`df -h|grep "/data1" |awk '{print $2}'` disk1_free=`df -h|grep "/data1" |awk '{print $4}'` disk1_use=`df -h|grep "/data1" |awk '{print $3}'` function SendMessageToDingding(){ Dingding_Url="xxxx" PHONE="本人手机号码" JOB1="xx数据库备份信息" 。。。 # 发送钉钉消息 curl -H "Content-Type: application/json" -X POST --data ' { "msgtype": "text", "text": { "content": "'${d_t}' \r'${JOB1}' \r'${JOB5}': '${mysql_connections}' \rNFS1共享文件磁盘空间大小: '${disk_count}' 空闲: '${disk_free}' 已用: '${disk_use}' \rNFS2共享文件磁盘空间大小: '${disk1_count}' 空闲: '${disk1_free}' 已用: '${disk1_use}'" }, "at": { "atMobiles": [ "'${PHONE}'" ], "isAtAll": false } }' ${Dingding_Url} > /dev/null 2>&1 }