Shell实现监控MySQL Slave状态并通过邮件告警

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

猜你喜欢

转载自blog.csdn.net/qq625281334/article/details/84393490
今日推荐