Shell實現監控MySQL Slave狀態並通過郵件告警
阿新 • • 發佈:2018-12-16
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