每周一坑-【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
}
posted @ 2021-03-03 23:13  windysai  阅读(63)  评论(0编辑  收藏  举报