原理:
1)監控MYSQL的運行狀態;
2)Slave機器的IO和SQL狀態都必須為YES,缺一不可;
注意,請結合自身的實際環境使用。
ps:網上搜了下,大致都存在同一個坑,echo輸出的時候沒有注意默認不轉義換行的問題,會導致對Slave_SQL_Running的監控失去意義,實際上是把Slave_IO_Running的值重復監控了。
#!/bin/sh
ip=eth0? #網卡名稱
mysql_binfile=/usr/bin/mysql
mysql_user=root? #MySQL數據庫賬號
mysql_pass=123456? #密碼
datetime=`date +"%Y-%m-%d/%H:%M:%S"`? #獲取當前時間
mysql_slave_logfile=/var/log/mysql/check_mysql_slave.log? #日志文件路徑,必須提前創建好
slave_ip=`ifconfig $ip|grep "inet " | awk -F[:" "]+ '{print $4}'`
status=$($mysql_binfile -u$mysql_user -p$mysql_pass -e "show slave status\G" | grep -i "running")
#驗證方式:Slave_IO_Running=`echo -n "$status" | grep Slave_IO_Running | awk ' {print $1}'` (輸出Slave_IO_Running為正常)
Slave_IO_Running=`echo -n "$status" | grep Slave_IO_Running | awk ' {print $2}'`
#驗證方式:Slave_IO_Running=`echo -n "$status" | grep Slave_SQL_Running | awk ' {print $1}'` (輸出Slave_SQL_Running為正常)
Slave_SQL_Running=`echo -n "$status" | grep Slave_SQL_Running | awk '{print $2}'` #網上有類似的代碼,這里的echo應該加-n參數,并且變量應加引號,否則不轉義換行符,實際匹配出來的結果是Slave_IO_Running參數的值
if [ "$Slave_IO_Running" = "Yes" -a "$Slave_SQL_Running" = "Yes" ]
then
echo "Slave is Running!"
echo "$datetime $slave_ip Slave is Running!" >> $mysql_slave_logfile
else
echo "$datetime $slave_ip Slave is not running!"
echo "$datetime $slave_ip Slave is not running!" >> $mysql_slave_logfile
fi