您好,登錄后才能下訂單哦!
目標:對Mysql從庫進行狀態監控,如果從庫復制異常就告警
思路:
1、首先查找Mysql從庫的4個參數值(show slave status根據這個命令);分別是從庫的IO線程、SQL線程、復制延遲時間(這個在以下腳本沒用到,可以再寫個腳本對其延遲進行告警)、錯誤碼
2、函數Mysql_status判斷,對IO線程、SQL線程、錯誤碼三者邏輯與判斷
3、如果為假則執行函數Mysql_Errno
4、對于mysql錯誤碼為1158 1159 1008 1007 1062 我們可以進行停止slave,跳過當前復制條數,進行下一條復制
[root@zabbix script]# cat mysql_check.sh
#!/bin/bash
#
#2017.5.8
#mysql狀態監測告警
. /etc/init.d/functions
Mysql_IO_cmd=`mysql -h 10.222.1.5 -uroot -p123456 -e 'show slave status\G'|grep Slave_IO_Running |awk '{print $NF}'`
Mysql_SQL_cmd=`mysql -h 10.222.1.5 -uroot -p123456 -e 'show slave status\G'|grep Slave_SQL_Running |awk '{print $NF}'`
Mysql_Be_cmd=`mysql -h 10.222.1.5 -uroot -p123456 -e 'show slave status\G'|grep Seconds_Behind_Master |awk '{print $NF}'`
Mysql_Errno_cmd=`mysql -h 10.222.1.5 -uroot -p123456 -e 'show slave status\G'|grep Last_SQL_Errno |awk '{print $NF}'`
ErrorNo=(1158 1159 1008 1007 1062)
##判斷mysql復制的錯誤碼
Mysql_Errno() {
for sum in $ErrorNo
do
if [ "$Mysql_Errno_cmd" == "$sum" ];then
echo "$(date +%F_%R)錯誤狀態碼:$Mysql_Errno_cmd" >> /tmp/mysql_error.log
mysql -h 10.222.1.5 -uroot -p123456 -e 'stop slave;set global sql_slave_skip_counter=1;start slave;'
echo `sort -r /tmp/mysql_error.log` |mail -s "MySQL Slave is error" zabbix_client@jt56.org
else
echo "$(date +%F_%R)錯誤狀態碼:$Mysql_Errno_cmd" >> /tmp/mysql_error.log
#echo `sort -r /tmp/mysql_error.log` |mail -s "MySQL Slave is error" zabbix_client@jt56.org
uniq /tmp/mysql_error.log |mail -s "MySQL Slave is error" zabbix_client@jt56.org
fi
done
}
##監測mysql狀態函數
Mysql_status() {
if [ "$Mysql_IO_cmd" == "Yes" -a "$Mysql_SQL_cmd" == "Yes" -a "$Mysql_Errno_cmd" == "0" ];then
echo
action "mysql status" /bin/true
else
echo
action "mysql status" /bin/false
Mysql_Errno
fi
}
Mysql_status
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。