SHELL实现监控mysql Slave 状态并通过邮件告警
实现思路:
1.使用直接查看mysql status获取Slave相关参数值,进行判断;
2.当延迟超过一定时间就发邮件进行告警;
3.Crontab里面,每三十分钟跑一次
详细代码如下:
#!/bin/bash
#crontab time :every 30 minutes once
#author : [email protected]
#date : 2018-11-20
mysql_hostname='数据库服务器IP或者主机名'
user=数据库用户名
password='密码'
gettime=`date +"%y-%m-%d %H:%M:%S"`
Log=/tmp/check_mysql_slave.log
STATUS=$(/usr/local/mysql/bin/mysql -u $user -p${password} -e "show slave status\G" 2>/dev/null| grep -i "running")
Slave_Behind_time=$(/usr/local/mysql/bin/mysql -u root -p${password} -e "show slave status\G" 2>/dev/null | grep -i "Seconds_Behind_Master"|awk '{print $2}')
IO_pro=`echo $STATUS | grep IO | awk ' {print $2}'`
SQL_pro=`echo $STATUS | grep SQL | awk '{print $2}'`
if [ "$IO_pro" = "Yes" -a "$SQL_pro" = "Yes" ];
then
echo "Slave is running!"
if [ $Slave_Behind_time -gt 300 ];
then
echo "####### $gettime #########"> $Log
echo -e "${mysql_hostname} is relay and behind master time is:${Slave_Behind_time}" >> $Log
mail -s "${mysql_hostname} Relay" [email protected] < $Log
fi
else
echo "####### $gettime #########"> $Log
echo "slave is not running!" >> $Log
Last_Err=$(/usr/local/mysql/bin/mysql -u root -p${password} -e "show slave status\G" 2>/dev/null| grep -i "Last_Error"|awk ' {print $2}')
echo "the Error is $Last_Err ">> $Log
mail -s "${mysql_hostname} Slave is not running!!!" [email protected] < $Log
fi
定时任务里面增加任务计划
*/30 * * * * /bin/sh /root/cronshell/check_mysql_slave.sh > /dev/null 2>&1