<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qileilove

    blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

    如何檢查MySQL數(shù)據(jù)庫的主從延時?

     MySQL數(shù)據(jù)庫主從延時如何去判斷呢?本文我們介紹了兩種判斷方法:1. Seconds_Behind_Master vs 2. mk-heartbeat,接下來我們就分別介紹這些內(nèi)容。

      日常工作中,對于MySQL主從復(fù)制檢查,一方面我們要保證復(fù)制的整體結(jié)構(gòu)是否正常,另一方面需要檢查主從數(shù)據(jù)是否保持一致。對于前者我們可以通過監(jiān)控復(fù)制線程是否工作正常以及主從延時是否在容忍范圍內(nèi),對于后者則可以通過分別校驗主從表中數(shù)據(jù)的md5碼是否一致,來保證數(shù)據(jù)一致,可以使用Maatkit工具包中的mk-table- checksum工具去檢查。

      方法1:

      通過監(jiān)控show slave status\G命令輸出的Seconds_Behind_Master參數(shù)的值來判斷,是否有發(fā)生主從延時。其值有這么幾種:

      NULL — 表示io_thread或是sql_thread有任何一個發(fā)生故障,也就是該線程的Running狀態(tài)是No,而非Yes。

      0 — 該值為零,是我們極為渴望看到的情況,表示主從復(fù)制良好,可以認(rèn)為lag不存在。

      正值 — 表示主從已經(jīng)出現(xiàn)延時,數(shù)字越大表示從庫落后主庫越多。

      負(fù)值 — 幾乎很少見,我只是聽一些資深的DBA說見過,其實,這是一個BUG值,該參數(shù)是不支持負(fù)值的,也就是不應(yīng)該出現(xiàn)。

      show slave status\G,該命令的輸出結(jié)果非常豐厚,給我們的監(jiān)控提供了很多有意義的參數(shù),比如:Slave_IO_Running該參數(shù)可作為 io_thread的監(jiān)控項,Yes表示io_thread的和主庫連接正常并能實施復(fù)制工作,No則說明與主庫通訊異常,多數(shù)情況是由主從間網(wǎng)絡(luò)引起的問題;Slave_SQL_Running該參數(shù)代表sql_thread是否正常,具體就是語句是否執(zhí)行通過,常會遇到主鍵重復(fù)或是某個表不存在。下面就說到今天的重點(diǎn)Seconds_Behind_Master,該值作為判斷主從延時的指標(biāo),那么它又是怎么得到這個值的呢,同時,它為什么又受到很多人的質(zhì)疑?

      Seconds_Behind_Master是通過比較sql_thread執(zhí)行的event的timestamp和 io_thread復(fù)制好的event的timestamp(簡寫為ts)進(jìn)行比較,而得到的這么一個差值。我們都知道的relay-log和主庫的 bin-log里面的內(nèi)容完全一樣,在記錄sql語句的同時會被記錄上當(dāng)時的ts,所以比較參考的值來自于binlog,其實主從沒有必要與NTP進(jìn)行同步,也就是說無需保證主從時鐘的一致。

      你也會發(fā)現(xiàn),其實比較真正是發(fā)生在io_thread與sql_thread之間,而io_thread才真正與主庫有關(guān)聯(lián),于是,問題就出來了,當(dāng)主庫I/O負(fù)載很大或是網(wǎng)絡(luò)阻塞,io_thread不能及時復(fù)制binlog(沒有中斷,也在復(fù)制),而 sql_thread一直都能跟上io_thread的腳本,這時Seconds_Behind_Master的值是0,也就是我們認(rèn)為的無延時,但是,實際上不是,你懂得。這也就是為什么大家要批判用這個參數(shù)來監(jiān)控數(shù)據(jù)庫是否發(fā)生延時不準(zhǔn)的原因,但是這個值并不是總是不準(zhǔn),如果當(dāng)io_thread與 master網(wǎng)絡(luò)很好的情況下,那么該值也是很有價值的。

      之前,提到Seconds_Behind_Master這個參數(shù)會有負(fù)值出現(xiàn),我們已經(jīng)知道該值是io_thread的最近跟新的ts與sql_thread執(zhí)行到的ts差值,前者始終是大于后者的,唯一的肯能就是某個event的ts發(fā)生了錯誤,比之前的小了,那么當(dāng)這種情況發(fā)生時,負(fù)值出現(xiàn)就成為可能。

      方法2:

      mk-heartbeat,Maatkit萬能工具包中的一個工具,被認(rèn)為可以準(zhǔn)確判斷復(fù)制延時的方法。

      mk-heartbeat的實現(xiàn)也是借助timestmp的比較實現(xiàn)的,它首先需要保證主從服務(wù)器必須要保持一致,通過與相同的一個NTP server同步時鐘。它需要在主庫上創(chuàng)建一個heartbeat的表,里面至少有id與ts兩個字段,id為server_id,ts就是當(dāng)前的時間戳 now(),該結(jié)構(gòu)也會被復(fù)制到從庫上。

      表建好以后,會在主庫上以后臺進(jìn)程的模式去執(zhí)行一行更新操作的命令,定期去向表中的插入數(shù)據(jù),這個周期默認(rèn)為1 秒,同時從庫也會在后臺執(zhí)行一個監(jiān)控命令,與主庫保持一致的周期去比較,復(fù)制過來記錄的ts值與主庫上的同一條ts值,差值為0表示無延時,差值越大表示延時的秒數(shù)越多。

      我們都知道復(fù)制是異步的ts不肯完全一致,所以該工具允許半秒的差距,在這之內(nèi)的差異都可忽略認(rèn)為無延時。這個工具就是通過實打?qū)嵉膹?fù)制,巧妙的借用timestamp來檢查延時,非常好用!

      關(guān)于檢查MySQL數(shù)據(jù)庫的主從延時的兩種方法就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!

    posted on 2011-12-20 14:29 順其自然EVO 閱讀(334) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    <2011年12月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導(dǎo)航

    統(tǒng)計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲今日精彩视频| 亚洲人成人77777在线播放| 免费在线看污视频| 久久久亚洲AV波多野结衣| 天天天欲色欲色WWW免费| 9久热这里只有精品免费| 亚洲日本视频在线观看| www国产亚洲精品久久久| 99久久免费精品高清特色大片| 亚洲熟妇av午夜无码不卡| 亚洲午夜无码久久久久| 最近中文字幕免费mv视频7| 精品熟女少妇aⅴ免费久久 | 男人的天堂亚洲一区二区三区 | 亚洲妇女无套内射精| 亚洲色成人中文字幕网站| 成人网站免费观看| 中文字幕免费视频精品一| 亚洲中文字幕久久久一区| 亚洲国产综合无码一区| 日韩在线免费看网站| 猫咪免费人成网站在线观看| 本道天堂成在人线av无码免费| 亚洲a视频在线观看| 亚洲AV无码一区二区三区DV | 亚洲乱码在线视频| 亚洲av无码不卡| 亚洲国产精品视频| 免费涩涩在线视频网| 亚洲免费二区三区| 国产一精品一AV一免费| 免费人成网站永久| 亚洲av日韩专区在线观看| 亚洲人成影院午夜网站| 久久亚洲精品成人综合| 亚洲欧洲国产精品香蕉网| 亚洲欧洲精品成人久久曰影片 | 亚洲成A∨人片天堂网无码| 毛片免费视频观看| 五月亭亭免费高清在线| 99re在线精品视频免费|