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

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

故事背景

由于公司数据库服务器非常多,所以如果真的需要去人工巡检备份情况还是很麻烦,于是就想通过脚本来自动检查并且每天通过钉钉机器人通知到用户。

情况1:当备份数据库能够联网

如果备份服务器能够联网,那么就能直接调用钉钉机器人的 API,这也是最简单的发送钉钉通知的方式,脚本如下,按需修改:

#!/bin/bash

######################################################################
# 用途:MySQL 备份检查钉钉通知
# 作者:Dylan<[email protected]>
# 时间: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<[email protected]>
# 时间: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 [email protected]$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<[email protected]>
# 时间: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备份服务器的脚本加入定时任务每天检查即可!最终发送效果如下:

原文地址:https://www.cnblogs.com/lonelyxmas/p/12409071.html

时间: 2024-08-29 05:15:13

数据库备份结果检查钉钉通知脚本的相关文章

Java实现数据库备份并利用ant导入SQL脚本

? 数据备份对于经常在运维部署方面的工作者来说,是一件相对简单的事情,都可以通过某一个SQL工具进行备份,但是如果在项目运行当中,我们需要对数据进行实时,或者是每隔一星期,一个月,等等进行数据的备份,这样就需要java工具来操作备份SQL文件,目前可以通过调用mysql安装的命令进行数据备份,另外通过Job任务调度器进行配合使用,这里技术选型为Quartz. 在下面代码当中address为SQL脚本文件存放的地址. 其中path为mysql的安装位置: D:\mysql\mysql-5.6.35

基于elasticsearch和elastalert的备份状态检查

一,业务背景 数据的备份(恢复)对于企业来说,是挽救生命的最后一根稻草:也是运维日常工作的一个重要组成部分.目前流行的方式是采用脚本对数据进行备份,并同步到远端进行异地备份.一旦需要备份的数据多了后,会面临以下问题: 1.备份是否成功,需要在每个脚本里进行判断并发送邮件,一旦涉及邮箱账号密码调整需要每个脚本调整,容易遗漏: 对于日常审计要求,如何快速提供备份操作结果是个麻烦事情(登录到机器一个个的统计记录,容易吐):之前看<devops最佳实践>一书中一个案例提及,他们公司所有服务器操作记录都

禅道及其数据库自动备份及短信、邮件通知脚本

一.添加SMTP服务器 在需要发送自动报警的服务器上修改如下文件,增加如下两行 # vim /etc/mail.rc set [email protected] smtp=smtp.126.com set smtp-auth-user=doteyplay smtp-auth-password=*** smtp-auth=login     当然,这里的SMTP服务器也可以使用别的,比如QQ的,但是QQ只能发几卦,在测试的时候,总报错:smtp-server: 454 Error: authent

用Python实现阿里钉钉机器人读取数据库内容自动发群通知

最近想把一些预警数据信息按照一定的要求自动发送到移动端APP,最终把目标放在了腾讯的微信和阿里的钉钉软件上,由于刚开始学习python,于是编程工具想用python来实现.微信使用群体最广,通过一天的研究用itchat库已经实现,但由于itchat需要用web微信方式登录,发现微信对新注册的用户关闭了web微信功能,于是考虑用备选方案阿里钉钉来实现,其实阿里钉钉虽然没有微信用户群体庞大,但是在企业应用方面比微信强大了太多,很多企业已经开始开始用钉钉作为内部沟通工具. 一.工作准备 1.Pytho

????双机热备数据库备份脚本 v2.1

Text /* THIS4.0 数据库备份脚本 [作者] Rulition QQ:7355157 [版本] v2.1 [修改] 2010年5月21日15:35:13 完成 2010年5月24日11:35:13 细节修改 2010年5月25日11:31:13 增加[完整备份]前的一致性检查 2010年5月27日10:31:13 检查差异备份的大小,避免过大文件影响差异备份. 2010年5月28日11:14:15 补备份时查看最近是否已做过完全备份. 2010年10月17日21:58:32 切换@备

自动化执行 - 钉钉机器人通知

背景 公司内部用钉钉来办公,钉钉支持机器人提醒,有各种各样的机器人提供选择,可以根据需求来定制机器人,达到提醒功能,如提醒某人请下午茶,233 思路 1. 添加机器人到群组中,这次将的是“自定义”机器人: 2. 添加后会发现有一个webhook的链接,可以点击“设置说明”查看详情 3. 可以通过post请求网这个webhook发送信息,机器人就可以在群里展示信息,文档里有定义不同的请求body: 文档地址:https://open-doc.dingtalk.com/docs/doc.htm?sp

钉钉(dingding)的sonar(代码质量管理工具的)集成通知

代码地址: https://gitee.com/chejiangyi/dingding-sonar 钉钉(dingding)的sonar(代码质量管理工具的)集成通知,非常简单的一个小工具. 钉钉的sonar集成通知 项目部署 #下载release包 /releases/dingding-sonar-1.0-SNAPSHOT.jar wget https://gitee.com/chejiangyi/dingding-sonar/repository/archive/master.zip unz

Zabbix 配置钉钉脚本告警(4)

title: Zabbix 配置钉钉脚本告警(4) date: 2018-12-10 11:50:21 tags: Zabbix categories: Zabbix copyright: true --- Zabbix是一个非常强大的监控系统,是企业级的软件,来监控IT基础设施的可用性和性能.它是一个能够快速搭建起来的开源的监控系统,Zabbix能监视各种网络参数,保证服务器系统的安全运营,并提供灵活的通知机制以让系统管理员快速定位解决存在的各种问题,Zabbix系统几乎可用于任何系统的监控过

钉钉机器人自定义通知-python

创建一个钉钉群然后添加一个自定义的机器人 安全设置是必填项 自定义关键字:报警 钉钉发送通知时,必须包含 关键子 "报警" 不然会 报 keyword not in content. 钉钉文档: https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq 机器人创建成功后,针对文档中发送钉消息类型选择合适的进行触发. python 脚本 body={ "msgtype": "markdown", &q