如何監控MySQL主從同步狀況

在高併發網站架構中,MySQL數據庫主從同步是不可或缺的,不過常常會發生因爲網絡緣由或者操做錯誤,MySQL主從常常會出現不一樣步的狀況,那麼如何監控MySQL主從同步,也變成網站正常運行的重要環節。

MySQL主從同步監控

MySQL同步功能由3個線程(master上1個,slave上2個)來實現,簡單的說就是:master發送日誌一個,slave接收日誌一個,slave運行日誌一個。 mysql

首先,咱們解釋一下 show slave status  中重要的幾個參數:
Slave_IO_Running: I/O線程是否被啓動併成功地鏈接到主服務器上。 ios

Slave_SQL_Running: SQL線程是否被啓動。 sql

Seconds_Behind_Mastershell

本字段是從屬服務器「落後」多少的一個指示。當從屬SQL線程正在運行時(處理更新),本字段爲在主服務器上由此線程執行的最近的一個事件的時間標記開始,已通過的秒數。當此線程被從屬服務器I/O線程遇上,並進入閒置狀態,等待來自I/O線程的更多的事件時,本字段爲零。總之,本字段測量從屬服務器SQL線程和從屬服務器I/O線程之間的時間差距,單位以秒計。 數據庫

如何監控從服務器是否正常運行呢? windows

1. 手動執行SHELL腳本 bash

show slave status\G

查看上面所說的3個參數是否正常運行。 服務器

2. Percona Toolkit 網絡

Percona Toolkit 提供了一些MySQL數據庫相關的工具,能夠很好的管理MySQL數據庫。
Percona工具包能夠去這裏下載:http://www.percona.com/software/percona-toolkit 架構

pt-heartbeat: 監控MySQL從服務器的延時時間。
pt-slave-restart: 管理MySQL從服務器重啓。
pt-table-checksum: 檢查主從同步數據的一致性,好比遇到複製錯誤,咱們執行了skip error操做以後,檢查一下數據仍是頗有必要的。不過這個工具須要提早設置一下,安裝相應的checksum表,請參閱相關資料。

3. 第三方工具

MySQL Enterprise Monitor,MySQL企業版監控工具。
MONyog – MySQL Monior and Advisor,MONyog你們都不陌生,windows下比較好用的MySQLGUI提供者,也有相關MySQL監控工具。

4. Nagios 以及Zabbix 的相關插件。

Nagios相關插件仍是很豐富的,你們能夠找到相關MySQL Slave的監控工具。

最後,這裏給你們一個開源的MySQL Slave的監控腳本,實用cronjob或者其餘相關工具就能夠輕易的設置本身的監控工具。

好比咱們實用Jenkins+shell腳本,作失敗通知便可迅速的搭建一個簡單的MySQL監控工具。

MySQL Slave 監控腳本:

#!/bin/bash # (C) 2012 - Vincent van Scherpenseel, SYN-ACK.org   ### VARIABLES ### SERVER=`hostname` SECONDS_BEHIND_MASTER=`/usr/bin/mysql -e "SHOW SLAVE STATUS\G"| grep "Seconds_Behind_Master" | awk -F": " {' print $2 '}` SENTFILE_BROKEN=/tmp/mysql_slaverep_broken.sent SENTFILE_BEHIND=/tmp/mysql_slaverep_behind.sent     ### CHECK FOR REPLICATION BREAK ### if [ "$SECONDS_BEHIND_MASTER" == "NULL" ]; then         # Slave replication is broken           if [ ! -f $SENTFILE_BROKEN ]; then                 # This has not been reported before                 echo "Slave replication broken on $SERVER"                 touch $SENTFILE_BROKEN         fi else         # Slave replication is not broken           if [ -f $SENTFILE_BROKEN ]; then                 # It was broken before which was reported. Clear that state                 echo "Slave replication has been restored on $SERVER"                 rm $SENTFILE_BROKEN         fi           ### CHECK FOR REPLICATION DELAY ###         if [ "$SECONDS_BEHIND_MASTER" -gt "60" ]; then                 # Slave replication is delayed                   if [ ! -f $SENTFILE_BEHIND ]; then                         # This has not been reported before                         echo "Slave replication is $SECONDS_BEHIND_MASTER seconds behind master on $SERVER"                         touch $SENTFILE_BEHIND                 fi         else                 # Slave replication is not delayed                   if [ -f $SENTFILE_BEHIND ]; then                         # It was delayed before which was reported. Clear that state                         echo "Slave replication delay has been recovered and is now $SECONDS_BEHIND_MASTER seconds behind master on $SERVER"                         rm $SENTFILE_BEHIND                 fi         fi   fi 

推薦閱讀:
如何添加新數據庫到MySQL主從複製列表

相關文章
相關標籤/搜索