概述
因生產(chǎn)環(huán)境是MySQL主從,而有時(shí)從庫(kù)掛掉,缺乏有效的監(jiān)控。為了及時(shí)發(fā)現(xiàn)從庫(kù)故障,所以簡(jiǎn)單寫了個(gè)mysql從庫(kù)檢測(cè)腳本,并發(fā)郵件通知,有待完善。
mysql主從監(jiān)控腳本
其實(shí)思路很簡(jiǎn)單,查看MySQL主從狀態(tài)應(yīng)該都會(huì),就是進(jìn)入MySQL,然后show master status和show slave status G,然后我要做的其實(shí)就是通過(guò)腳本定時(shí)進(jìn)入MySQL然后查看狀態(tài)得到信息,再通過(guò)grep和awk對(duì)文本進(jìn)行解析,然后關(guān)鍵的slave_sql_running、slave_io_running和last_error判斷后,異常則發(fā)送郵件。
#!/bin/bash
#copyright by hwb
#check MySQL_Slave Status
#crontab time 00:10
MYSQLPORT=`netstat -na|grep "LISTEN"|grep "3306"|awk -F[:" "]+ '{print $4}'`
MYSQLIP=`ifconfig | grep inet |grep -v 'inet6'|grep -v '127.0.0.1'|awk -F ' ' '{print $2}'`
STATUS=$(mysql -u root -pXXX -e "show slave statusG" | grep -i "running")
IO_env=`echo $STATUS | grep IO | awk ' {print $2}'`
SQL_env=`echo $STATUS | grep SQL | awk '{print $2}'`
DATA=`date +"%y%m%d-%H:%M:%S"`
if [ "$MYSQLPORT" == "3306" ]
then
echo "mysql is running"
else
mail -s "warn!server: $MYSQLIP mysql is down" [email protected]
fi
if [ "$IO_env" = "Yes" -a "$SQL_env" = "Yes" ]
then
echo "Slave is running!"
else
echo "####### $DATA #########">> /home/check_mysql_slave.log
echo "Slave is not running!" >> /home/check_mysql_slave.log
echo "Slave is not running!" | mail -s "warn!$MYSQLIP MySQL Slave is not running" [email protected]
fi
輸出結(jié)果:
停止mysql后:
設(shè)置定時(shí)任務(wù)
0 */5 * * * sh /home/scripts/mysql.sh







