監控MySQL主從同步延時
如何監控MySQL主從之間的延遲,通常有兩種方法:Seconds_Behind_Master和mk-heartbeat
方法1:通過監控show slave status\G命令輸出的Seconds_Behind_Master參數的值來判斷,是否有發生主從延時。
show slave status; # 需要有replcation client許可權
以下是show slave status\G的輸出結果的幾個重點參數說明:
Slave_IO_Running:該參數可作為io_thread的監控項,Yes表示io_thread的和主庫串連正常並能實施複製工作,No則說明與主庫通訊異常,多數情況是由主從間網路引起的問題;
Slave_SQL_Running:該參數代表sql_thread是否正常,具體就是語句是否執行通過,常會遇到主鍵重複或是某個表不存在。
Seconds_Behind_Master:是通過比較sql_thread執行的event的timestamp和io_thread複製好的event的timestamp(簡寫為ts)進行比較,而得到的這麼一個差值;
NULL—表示io_thread或是sql_thread有任何一個發生故障,也就是該線程的Running狀態是No,而非Yes。
0 — 該值為零,是我們極為渴望看到的情況,表示主從複製良好,可以認為lag不存在。
正值 — 表示主從已經出現延時,數字越大表示從庫落後主庫越多。
負值 — 幾乎很少見,我只是聽一些資深的DBA說見過,其實,這是一個BUG值,該參數是不支援負值的,也就是不應該出現。
方法2:mk-heartbeat:Maatkit萬能工具包中的一個工具,被認為可以準確判斷複製延時的方法。
mk-heartbeat的實現也是藉助timestmp的比較實現的,它首先需要保證主從伺服器必須要保持一致,通過與相同的一個NTP server同步時鐘。它需要在主庫上建立一個heartbeat的表,裡面至少有id與ts兩個欄位,id為server_id,ts就是當前的時間戳記now(),該結構也會被複製到從庫上,表建好以後,會在主庫上以後台進程的模式去執行一行更新操作的命令,定期去向表中的插入資料,這個周期預設為1秒,同時從庫也會在後台執行一個監控命令,與主庫保持一致的周期去比較,複製過來記錄的ts值與主庫上的同一條ts值,差值為0表示無延時,差值越大表示延時的秒數越多。我們都知道複製是非同步ts不肯完全一致,所以該工具允許半秒的差距,在這之內的差異都可忽略認為無延時。這個工具就是通過實打實的複製,巧妙的借用timestamp來檢查延時;
本文永久更新連結地址: