Mysql主從配置詳見:http://chinawu.blog.51cto.com/10692884/1739327
主從正常狀態是slave上的狀態值:Slave_IO_Running:YES和Slave_SQL_Running:YES,當出現一個NO,表明mysql主從已破壞,但是,運維人員不可能隨時進入mysql的slave上的狀態值。所以需要一個腳步在規定時間內檢測是否關係正常。
腳步大致內容:
#!/bin/bash
#Check MySQL_Slave Status
#MySQL version: 5.1.73
#2016-01-29
MySQL_PORT=`netstat -an|grep "LISTEN"|grep "3306"|awk -F ' ' '{print $4}'|awk -F ':' '{print $2}'` #注意:租後一個print $2,不一定適用所有主機,根據實際情況pring值
MySQL_IP=`ifconfig eth0 |grep "inet addr"|awk -F ':' '{print $2}'|awk -F ' ' '{print $1}'`
MySQL_Status=$(/usr/local/mysql/bin/mysql -S /tmp/mysql.socket -uroot -pfgjh123. -e "show slave status\G" |grep -i "running"|head -n2)
IO_env=`echo $MySQL_Status | grep Slave_IO_Running |awk '{print $2}'`
SQL_env=`echo $MySQL_Status |grep Slave_SQL_Running |awk '{print $2}'`
ToDay=`date +"%y-%m-%d %H:%M:%S"`
if [ "$MySQL_PORT" == "3306" ]
then
echo "###### $ToDay ######" >> /data/check_mysql_slave_ok.log
echo "MySQL Server is running !" >> /data/check_mysql_slave_ok.log
else
mail -s "Warn! Server:$MySQL_IP MySQL is Down" [email protected]
fi
if [ "$IO_env" = "Yes" -a "$SQL_env" = "Yes" ]
then
echo "###### $ToDay ######" >> /data/check_mysql_slave_ok.log
echo "Slave MySQL Server Slave_IO and Slave_SQL is running !" >> /data/check_mysql_slave_ok.log
else
echo "###### $ToDay ######" >> /data/check_mysql_slave_warn.log
echo "Slave is not running !" >> /data/check_mysql_slave_warn.log
echo "Slave is not running !" | mail -s "Warn! $MySQL_IP MySQL Slave is not running " [email protected]
fi
隨後放入自動執行任務列表中,crontab -e
*/10 * * * * root /bin/sh /root/shell/Check_MySQL_Slave_Status.sh
每十分鐘運行一次檢測腳步(時間自定義,crontab五個參數請自習)
zabbix添加觸發器,檢測mysql主從,微信告警
[root@DB2 scripts]# cat mysql-replication.sh
#!/bin/bash
mysql -uzabbix -e 'show slave status\G' |grep -E "Slave_IO_Running|Slave_SQL_Running"|awk '{print $2}'|grep -c Yes
[root@DB2 scripts]#
[root@DB2 etc]# tail -15 zabbix_agentd.conf
UserParameter=mysql.replication, /home/zabbix/scripts/mysql-replication.sh
UserParameter=mysql.status[*],/home/zabbix/scripts/chk_mysql.sh $1