1. 程式人生 > >Shell實現監控MySQL Slave狀態並通過郵件告警

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