1.使用钉钉
方法1(已经实现)
Mysql版本5.7.34
必须注意执行脚本的用户需要使用mysql,如果使用root可能报错,使用定时任务执行即可。
#!/bin/bash
#check MySQL_Slave Status
#crontab time 00:10
a=`hostname`
MYSQLIP=`ifconfig eth0 | awk NR==2'{print $2}'`
DING_TOKEN='https://oapi.dingtalk.com/robot/send?access_token=用自己的token'
USER=root
PASSWD=用自己的
STATUS=$(mysql -u$USER -p$PASSWD -h $MYSQLIP -e "show slave status\G" | grep -i "running:")
IO_env=`echo "$STATUS" | grep IO | awk ' {print $2}'`
SQL_env=`echo "$STATUS" | grep SQL | awk '{print $2}'`
DATA=`date +"%y-%m-%d %H:%M:%S"`if [ "$IO_env" == "Yes" -a "$SQL_env" == "Yes" ]
thenecho "Slave is running!" >/dev/null#curl $DING_TOKEN \# -H 'Content-Type: application/json' \# -d '{"msgtype": "text","text": {"content": "钉钉业务告警---warn! 【'$MYSQLIP'-'`hostname`'】:MySQL Slave is running."}}'
elsecurl $DING_TOKEN \-H 'Content-Type: application/json' \-d '{"msgtype": "text","text": {"content": "钉钉业务告警---warn! 【'$MYSQLIP'-'`hostname`'】:MySQL Slave is not running."}}'# echo "slave is error"
fi
方法2(供参考)
#!/bin/bash
Slave=$(mysql -uroot -pYdfoie#df1213% -e 'show slave status\G' 2>/dev/null |grep -E "Slave_IO_Running|Slave_SQL_Running"|awk '{print $2}'|grep -c Yes)
if [ "$Slave" -eq 2 ] ;thenecho "mysql Slave is running" >/dev/null
# curl $DING_TOKEN \
# -H 'Content-Type: application/json' \
# -d '{"msgtype": "text","text": {"content": "钉钉业务告警---warn! 【'`hostname`'】:MySQL Slave is running."}}'
elsecurl $DING_TOKEN \-H 'Content-Type: application/json' \-d '{"msgtype": "text","text": {"content": "钉钉业务告警---warn! 【'`hostname`'】:MySQL Slave is not running."}}'
fi
方法3
#!/bin/bashDING_TOKEN='https://oapi.dingtalk.com/robot/send?access_token=用自己的'
MYSQL_PORT=3306
MYSQL_VIP1=主库
MYSQL_VIP2=从库
MYSQL_USERNAME=root
MYSQL_PASSWORD=用自己的
GET_MYSQL_PORT=`netstat -na|grep "LISTEN"|grep "3306"|awk -F[:" "]+ '{print $5}'`
CHECK_MYSQL=`mysql -u$MYSQL_USERNAME -p$MYSQL_PASSWORD -h $MYSQL_VIP1 --connect_timeout=5 -e "show databases;"`
STATUS=$(mysql -u$MYSQL_USERNAME -p$MYSQL_PASSWORD -h $MYSQL_VIP1 -e "show slave status\G" | grep -i "running")
IO_env=`echo $STATUS | grep IO | awk ' {print $2}'`
SQL_env=`echo $STATUS | grep SQL | awk '{print $2}'`function checkMysqlStatus(){if [ "$GET_MYSQL_PORT" == "3306" ]thenif [ "$CHECK_MYSQL" -ne 0 ]thendingAlert "Server: $1 mysql is down, please try to restart mysql by manual!"elseecho "Server: $1 mysql is running..."fielsedingAlert "WARN!Server: $1 mysql is down."fiif [ "$IO_env" = "Yes" -a "$SQL_env" = "Yes" ]thenecho "Server: $1 MySQL Slave is running!"elsedingAlert "Server: $1 MySQL Slave is not running!"fi
}function dingAlert(){curl $DING_TOKEN \-H 'Content-Type: application/json' \-d "{\"msgtype\": \"text\", \"text\": {\"content\": \"数据库监控测试(需要输入钉钉机器人关键字来调用)\n$1\"}}"
}checkMysqlStatus $MYSQL_VIP1
企业微信
SLAVE_IP:为监控的主机IP
USER:为msyql用户
PASSWORD:为mysql密码
WHEREIS_MYSQL:为mysql命令路径
WEBHOOK:为企业微信机器人Webhook地址
wx():为企业微信机器人函数
Check_Mysql_Slave():为监控脚本主函数
#! /bin/bash
#
source /etc/profile
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
SLAVE_IP=`ip add | grep inet | grep brd | awk -F / '{print $1}' | awk -F " " '{print $2}' | awk 'NR==1'`
USER=monitor
PASSWORD=xxxxxx
TIME=`date`
WHEREIS_MYSQL=/opt/mysql/bin/mysql
WEBHOOK='https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=bb09197b-5ff6-4928-9872-xxxxxx'
wx(){
cat > $0.msg << EOF
curl '$WEBHOOK' \-H 'Content-Type: application/json' \-d '{"msgtype": "text","text": {"content": "$1",}}'
EOF
sh $0.msg && rm -rf $0.msg
}
Check_Mysql_Slave()
{$WHEREIS_MYSQL -u$USER -p$PASSWORD -h$SLAVE_IP -e "select version();" >/dev/null 2>&1if [ $? -ne 0 ];thenecho "Mysql is stopped $DATE" >> /data/mysql/check.logERROR="ERROR:Mysql-$SLAVE_IP cannot connect\n$TIME"wx "$ERROR"elseIO_SQL_STATUS=`$WHEREIS_MYSQL -u$USER -p$PASSWORD -h$SLAVE_IP -e "show slave status \G" 2>/dev/null | awk '/Slave_.*_Running:/{print $1$2}'`for i in $IO_SQL_STATUS;doTHREAD_STATUS_NAME=${i%:*}THREAD_STATUS=${i#*:}if [ "$THREAD_STATUS" != "Yes" ];thenSTATUS="ERROR:Mysql-$SLAVE_IP $THREAD_STATUS_NAME status is $THREAD_STATUS!\n$TIME"echo "$STATUS" >> /data/mysql/check.logwx "$STATUS"fidonefi
}
Check_Mysql_Slave