监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理员

要求:
每30秒实现检测一次。
如果同步出现如下错误号(1158,1159,1008,1007,1062),则跳过错误。

#!/bin/sh
#monitor mysql master to salve connection
#by zkg 2019-08-22

. /etc/init.d/functions

#Define variables
MYSQLUSER=root
MYSQLPASSWD=DbApp
SOCKET=/data/mysql/tmp/mysql.sock
MYSQLCMD="mysql -u$MYSQLUSER -p$MYSQLPASSWD -S $SOCKET"

#Define array
array_status=($($MYSQLCMD -e "show slave status;"|grep -E "_Running|Behind_Master|_IO_Errno"|awk -F "[:]+" '{print $NF}'|sed 's/ //g'))
error_num=(1158 1159 1008 1007 1062)

#Define function
function check_status(){
if [ "${array_status[0]}" = "Yes" -a "${array_status[1]}" = "Yes" -a "${array_status[2]}" = "0" ];then
action "slave is ok" /bin/true
status=0
return $status
else
status=1
return $status
fi
}

function check_error(){
check_status
if [ $? -ep 1 ];then
for ((i=0;i<${#error_num[*]};i++))
do
if [ "${error_num[i]}" == "${array_status[3]}" ];then
$MYSQLCMD -e "stop slave"
$MYSQLCMD -e "set global sql_slave_skip_counter=1"
$MYSQLCMD -e "start slave"
fi
done
fi
}

function check_again(){
array_status=($($MYSQLCMD -e "show slave status;"|grep -E "_Running|Behind_Master|_IO_Errno"|awk -F "[:]+" '{print $NF}'|sed 's/ //g'))
check_status &>/dev/null
if [ $? -ep 1 ];then
echo "mysql slave is failed,please check quick" >/tmp/mysql_error.log
mail -s "mysql slave is failed" 67897796@qq.com </tmp/mysql_error.log
fi
}

function main(){
while true
do
check_error
check_again
sleep 30
done
}
main

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值