Zabbix 檢測Mysql資料庫的主從同步
在高併發網站架構中,MySQL資料庫主從同步是不可或缺的,不過經常會發生由於網路原因或者操作錯誤,MySQL主從經常會出現不同步的情況,那麼如何監控MySQL主從同步,也變成檢測網站正常執行的重要環節。
MySQL同步功能由3個執行緒(master上1個,slave上2個)來實現,簡單的說就是:master傳送日誌一個,slave接收日誌一個,slave執行日誌一個。
首先,我們解釋一下 show slave status 中重要的幾個引數:
Slave_IO_Running: I/O執行緒是否被啟動併成功地連線到主伺服器上。 Slave_SQL_Running: SQL執行緒是否被啟動。 Seconds_Behind_Master:本欄位是從屬伺服器“落後”多少的一個指示。當從屬SQL執行緒正在執行時(處理更新),本欄位為在主伺服器上由此執行緒執行的最近的一個事件的時間標記開始,已經過的秒數。當此執行緒被從屬伺服器I/O執行緒趕上,並進入閒置狀態,等待來自I/O執行緒的更多的事件時,本欄位為零。總之,本欄位測量從屬伺服器SQL執行緒和從屬伺服器I/O執行緒之間的時間差距,單位以秒計。
那麼如何監控從伺服器是否正常執行呢?
1、建立監控MYSQL的賬號
mysql -uroot -p密碼 mysql> grant replication client on *.* to 'zabbix'@'localhost';
2、寫一個監控指令碼
這個指令碼主要用於獲取MYSQL主從同步資訊;
我們先執行一個命令
mysql -u zabbix -e 'show slave status\G'
我們在輸出的資訊中選擇
Slave_IO_Running: Yes Slave_SQL_Running: Yes
這兩項來監控,我測試了一下,當操作的資料出現異常的時候,Slave_SQL_Running就會變成No,當執行slave stop的時候,兩個都會變成No;
指令碼內容如下
#!/bin/bash mysql -uzabbix -e 'show slave status\G' |grep -E "Slave_IO_Running|Slave_SQL_Running"|awk '{print $2}'|grep -c Yes
我只寫了一條命令,這裡詳細說明一下它的意思;
先用zabbix這個使用者來獲取slave的所有狀態,然後grep出這兩個狀態,然後再輸出第二列,最後檢視有幾個Yes狀態的,正常情況下有兩個Yes狀態。
3、在zabbix agent裡面新增監控項
檔案的最後新增如下一行
UserParameter=,/home/zabbix/mysql-
等號後面的字串中,逗號前面是Key,後面是執行的指令碼(指令碼不要忘了執行許可權)
新增好之後,就重啟agent程式
4、Server端新增監控項
zabbix_get -s -k "" 2
這裡的 是我的agent的IP,如果主從複製正常,就會返回2 (代表兩個狀態都是Yes),現在就說明Server已經可以從agent獲取狀態了,現在在管理介面中先新增監控項:
配置--模板
先建立一個模板,這個模板的主要功能是用於監視MYSQL主從複製的狀態;
新增觸發器
當返回的值小於2時,說明只存在1個YES或0個YES,這時候說明MYSQL主從同步出現異常,即產生報警;
獲取最新資料
在這裡可以看到,已經獲取了最新的監控資料,說明監控新增成功;