当前位置:Gxlcms > 数据库问题 > 数据库备份结果检查钉钉通知脚本

数据库备份结果检查钉钉通知脚本

时间:2021-07-01 10:21:17 帮助过:35人阅读

#!/bin/bash

######################################################################
# 用途:MySQL 备份检查钉钉通知
# 作者:Dylan<1214966109@qq.com>
# 时间:2020-01-15
######################################################################

######################################################################
# 钉钉消息
######################################################################
# 钉钉机器人地址(填写自己的机器人)
DINGDING_URL="https://oapi.dingtalk.com/robot/send?xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

# 发送消息函数
function SendMessageToDingding(){ 
    curl "${DINGDING_URL}" -H Content-Type: application/json -d "
    {
        \"actionCard\": {
            \"title\": \"$1\", 
            \"text\": \"$2\", 
            \"hideAvatar\": \"0\", 
            \"btnOrientation\": \"0\", 
            \"btns\": [
                {
                    \"title\": \"$1\", 
                    \"actionURL\": \"\"
                }
            ]
        }, 
        \"msgtype\": \"actionCard\"
    }"
}

######################################################################
# 系统变量
######################################################################
# 当日日期
DATE_TODAY=$(/usr/bin/date +\%F)
# 昨天日期
DATE_YESTERDAY=$(/usr/bin/date -d last-day +%F)
# 当前IP地址
IP_ADDRESS=$(/usr/sbin/ip addr | grep inet | grep -vE inet6|127.0.0.1 | awk {print $2} | head -1)

######################################################################
# 用户变量(更改为自己的目录)
######################################################################
# 业务名称
SERVICE_NAME="测试服务"
# 备份目录
BACKUP_PATH="/data/backup/mysql-3306"
# 当日备份文件名称
BACKUP_FILE_TODAY="all-${DATE_TODAY}.sql"
# 昨天备份文件名称
BACKUP_FILE_YESTERDAY="all-${DATE_YESTERDAY}.sql"

######################################################################
# 获取两天的大小进行比较
######################################################################
# 今天的文件大小
if [[ -f ${BACKUP_PATH}/${BACKUP_FILE_TODAY} ]];then
    FILE_SIZE_TODAY=$(/usr/bin/ls -l ${BACKUP_PATH}/${BACKUP_FILE_TODAY} | /usr/bin/awk {print $5})
    FILE_SIZE_TODAY_H=$(/usr/bin/ls -lh ${BACKUP_PATH}/${BACKUP_FILE_TODAY} | /usr/bin/awk {print $5})
else
    FILE_SIZE_TODAY=0
    FILE_SIZE_TODAY_H=0
fi

# 昨天的文件大小
if [[ -f ${BACKUP_PATH}/${BACKUP_FILE_YESTERDAY} ]];then
    FILE_SIZE_YESTERDAY=$(/usr/bin/ls -l ${BACKUP_PATH}/${BACKUP_FILE_YESTERDAY} | /usr/bin/awk {print $5})
    FILE_SIZE_YESTERDAY_H=$(/usr/bin/ls -lh ${BACKUP_PATH}/${BACKUP_FILE_YESTERDAY} | /usr/bin/awk {print $5})
else
    FILE_SIZE_YESTERDAY=0
    FILE_SIZE_YESTERDAY_H=0
fi

# 消息内容
DINGDING_CONTENT="业务:${SERVICE_NAME}\n\n机器:${IP_ADDRESS}\n\n文件:${BACKUP_FILE_TODAY}\n\n大小:${FILE_SIZE_TODAY}(${FILE_SIZE_TODAY_H})\n\n时间:${DATE_TODAY}\n\n"

# 判断大小关系
if [[ ${FILE_SIZE_TODAY} == 0 ]];then
    SendMessageToDingding "${SERVICE_NAME}数据备份-[失败]" ${DINGDING_CONTENT}
elif [[ ${FILE_SIZE_TODAY} -le ${FILE_SIZE_YESTERDAY} ]];then
    SendMessageToDingding "${SERVICE_NAME}数据备份-[失败]" ${DINGDING_CONTENT}
else
    SendMessageToDingding "${SERVICE_NAME}数据备份-[成功]" ${DINGDING_CONTENT}
fi
技术图片

需要注意红色部分:

0. 业务名称需要改为自己业务的名称。

1. 钉钉机器人的 Token 需要该为自己的机器人。

2. 数据库备份的 SQL 存放目录需要改为自己的目录。

3. 数据库备份的 SQL 名字需要改为自己名字格式。

 

 

情况2:服务器无法访问公网

 

为了数据库安全,某些时候是没有外网的,所以需要内网其它跳板机器帮忙完成消息发送,在备份机器上面定时执行脚本:

技术图片
#!/bin/bash

######################################################################
# 用途:MySQL 备份检查触发钉钉
# 作者:Dylan<1214966109@qq.com>
# 时间:2020-01-15
######################################################################

######################################################################
# 系统变量
######################################################################
# 当日日期
DATE_TODAY=$(/usr/bin/date +\%F)
# 昨天日期
DATE_YESTERDAY=$(/usr/bin/date -d last-day +\%F)
# 当前IP地址
IP_ADDRESS=$(/usr/sbin/ip addr | grep inet | grep -vE inet6|127.0.0.1 | awk {print $2} | head -1)

######################################################################
# 用户变量
######################################################################
# 业务名称
SERVICE_NAME="测试服务"
# 备份目录
BACKUP_PATH="/data/backup/mysql-3306"
# 当日备份文件名称
BACKUP_FILE_TODAY="all-${DATE_TODAY}.sql"
# 昨天备份文件名称
BACKUP_FILE_YESTERDAY="all-${DATE_YESTERDAY}.sql"

######################################################################
# 获取两天的大小进行比较
######################################################################
# 今天的文件大小
if [[ -f ${BACKUP_PATH}/${BACKUP_FILE_TODAY} ]];then
    FILE_SIZE_TODAY=$(/usr/bin/ls -l ${BACKUP_PATH}/${BACKUP_FILE_TODAY} | /usr/bin/awk {print $5})
    FILE_SIZE_TODAY_H=$(/usr/bin/ls -lh ${BACKUP_PATH}/${BACKUP_FILE_TODAY} | /usr/bin/awk {print $5})
else
    FILE_SIZE_TODAY=0
    FILE_SIZE_TODAY_H=0
fi

# 昨天的文件大小
if [[ -f ${BACKUP_PATH}/${BACKUP_FILE_YESTERDAY} ]];then
    FILE_SIZE_YESTERDAY=$(/usr/bin/ls -l ${BACKUP_PATH}/${BACKUP_FILE_YESTERDAY} | /usr/bin/awk {print $5})
    FILE_SIZE_YESTERDAY_H=$(/usr/bin/ls -lh ${BACKUP_PATH}/${BACKUP_FILE_YESTERDAY} | /usr/bin/awk {print $5})
else
    FILE_SIZE_YESTERDAY=0
    FILE_SIZE_YESTERDAY_H=0
fi

# 判断大小关系
if [[ ${FILE_SIZE_TODAY} == 0 ]];then
    DINGDING_TITLE="${SERVICE_NAME}数据备份-\[失败\]"
elif [[ ${FILE_SIZE_TODAY} -le ${FILE_SIZE_YESTERDAY} ]];then
    DINGDING_TITLE="${SERVICE_NAME}数据小于昨天-\[失败\]"
else
    DINGDING_TITLE="${SERVICE_NAME}数据备份-\[成功\]"
fi

# 消息内容
DINGDING_CONTENT="业务:$SERVICE_NAME#机器:$IP_ADDRESS#文件:$BACKUP_FILE_TODAY#大小:$FILE_SIZE_TODAY/$FILE_SIZE_TODAY_H#时间:$DATE_TODAY#"

# 服务器远程信息
SERVER_IP="192.168.0.100"
SERVER_SSH_USER="root"
SERVER_SSH_PORT="22"
SERVER_SSH_PASSWORD="123456"
SERVER_REMOTE_SH_FILE="/data/shell/MYSQL-BACKUP-DING.sh"

# 远程执行
/usr/bin/expect<<EOF
    spawn ssh -p $SERVER_SSH_PORT $SERVER_SSH_USER@$SERVER_IP "$SERVER_REMOTE_SH_FILE $DINGDING_TITLE $DINGDING_CONTENT"
    expect {
        -timeout 2
        "yes/no" {send "yes\r";exp_continue}
        "*password" {send "$SERVER_SSH_PASSWORD\r"}
    }
expect eof
EOF
技术图片

需要注意:

0. 用户变量需要按照自己的需求修改。

1. 备份机器需要 yum 按照 expect。

2. 远程服务器信息需要配置正确,特别是远程脚本的绝对路径。

 

远程服务器根据备份服务器脚本中的绝对路径添加以下脚本:

技术图片
#!/bin/bash

######################################################################
# 用途:MySQL 备份检查钉钉通知
# 作者:Dylan<1214966109@qq.com>
# 时间:2020-01-15
######################################################################

######################################################################
# 钉钉消息
######################################################################
# 钉钉机器人地址
DINGDING_URL="https://oapi.dingtalk.com/robot/send?xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

# 发送消息函数
function SendMessageToDingding(){ 
    curl "${DINGDING_URL}" -H Content-Type: application/json -d "
    {
        \"actionCard\": {
            \"title\": \"$1\", 
            \"text\": \"$2\", 
            \"hideAvatar\": \"0\", 
            \"btnOrientation\": \"0\", 
            \"btns\": [
                {
                    \"title\": \"$1\", 
                    \"actionURL\": \"\"
                }
            ]
        }, 
        \"msgtype\": \"actionCard\"
    }"
}

# 处理传递的变量
DINGDING_TITLE=$1
DINGDING_CONTENT=${2//#/\\n\\n}

# 发送消息
SendMessageToDingding $DINGDING_TITLE $DINGDING_CONTENT
技术图片

注意机器人地址即可!

最后只需要将情况1的脚本或者情况2备份服务器的脚本加入定时任务每天检查即可!最终发送效果如下:

技术图片

数据库备份结果检查钉钉通知脚本

标签:tool   直接   路径   path   end   oda   else   作者   url   

人气教程排行