欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

如何理解mysql5.中的并行復(fù)制

如何理解 MySQL5.中的并行復(fù)制,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

專注于為中小企業(yè)提供做網(wǎng)站、網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)冷水灘免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千多家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

一 、 前言
    在 5.5以及5.5版本之前,復(fù)制流程圖如下:

    如何理解 mysql5.中的并行復(fù)制

    流程:
    ① 主庫(kù)dump thread 發(fā)現(xiàn)binlog有更新,則向 slave 的 IO thread 推送相應(yīng)的 binlog events
    ② slave 的 IO thread 在接收到 master新產(chǎn)生的events 之后 ,寫(xiě)入到自己的 relay log 中。
    ③ slave 的 SQL thread 開(kāi)始應(yīng)用 relay log,執(zhí)行相應(yīng)的更新語(yǔ)句

    弊端:
    ① master 在多個(gè)連接 并發(fā)的寫(xiě)入的情況下, slave 僅僅只有一個(gè) sql thread 進(jìn)行更新,會(huì)嚴(yán)重的造成主從延遲

二 、 并發(fā)復(fù)制
    官方稱之為enhanced multi-threaded slave(簡(jiǎn)稱MTS),在官方 mysql5.6 版本出現(xiàn)之前 , 阿里就有人實(shí)現(xiàn)過(guò) slave 的并發(fā)復(fù)制的功能,按照粒度分為 database , table  ,row 的。這里我們主要講官方版本。
    1> mysql5.6基于 database 的并行復(fù)制
        通過(guò) slave_parallel_workers=n 來(lái)設(shè)置并發(fā)復(fù)制的worker線程數(shù)量
        流程:
        ① 主庫(kù)dump thread 發(fā)現(xiàn)binlog有更新,則向 slave 的 IO thread 推送相應(yīng)的 binlog events
        ② slave 的 IO thread 在接收到 master新產(chǎn)生的events 之后 ,寫(xiě)入到自己的 relay log 中。
        ③ slave 的 coordinator thread 根據(jù) binlog events 的 database 進(jìn)行hash 調(diào)度分配給 worker thread
        ④ worker 線程 執(zhí)行相應(yīng)的 更新語(yǔ)句,互不影響

        分析:
        ① 實(shí)現(xiàn)了對(duì)database 的并行復(fù)制,在多庫(kù)更新的情況下slave的寫(xiě)入提升明顯,但若是master主要在某個(gè)database更新的話則此并行復(fù)制比較雞肋

    2> mysql5.7基于 database/logical_clock 的并行復(fù)制
        新添參數(shù) slave_parallel_type=DATABSE/LOGICAL_CLOCK 設(shè)定并行復(fù)制的方式,其中database跟5.6一樣,我們這里討論下為 LOGICAL_CLOCK的模式

        原理:  通過(guò) 在 master提交分為兩個(gè)階段 prepare 和 commit , 同時(shí) prepare 的 事物標(biāo)記相同的 last_commited(為當(dāng)前最近一次提交事務(wù)的 seq num) 。commit 的時(shí)候給相應(yīng)的事務(wù)標(biāo)記 sequence num(依次遞增)來(lái)實(shí)現(xiàn),這些組提交的信息記錄在GTID中。
        流程 :
        ① 主庫(kù)dump thread 發(fā)現(xiàn)binlog有更新,則向 slave 的 IO thread 推送相應(yīng)的 binlog events
        ② slave 的 IO thread 在接收到 master新產(chǎn)生的events 之后 ,寫(xiě)入到自己的 relay log 中。
        ③ slave 的 coordinator thread 把 binlog events 中相同的 last_commited 的進(jìn)行分配給 worker thread
        ④ worker 線程 執(zhí)行相應(yīng)的 更新語(yǔ)句,互不影響 , 對(duì)于每個(gè)事務(wù) ,其中seq=n 的執(zhí)行完畢之后 , last_commited=n 的便可以執(zhí)行了。

         這里 已經(jīng)幾乎跟 master的 并發(fā)操作一樣了,所以對(duì)于slave 來(lái)說(shuō)這種基于 組提交的 并發(fā)復(fù)制已經(jīng)達(dá)到了 master的并發(fā)度

         舉例:
          
          如何理解 mysql5.中的并行復(fù)制
               第一個(gè)數(shù)字為 last_commited , 第二個(gè)數(shù)字為 seq num

               slave 上執(zhí)行的順序?yàn)?nbsp;

                ① trx1 trx2 trx3
                ② trx4
                ③ trx5 trx6
                ④ trx7
                其中,trx1 執(zhí)行完畢 便可以執(zhí)行 trx4 ;trx2執(zhí)行完畢 便可以執(zhí)行 trx5 trx6; trx5執(zhí)行完畢 便可以執(zhí)行trx7.


PS:對(duì)于是否開(kāi)啟 GTID 進(jìn)行了一番測(cè)試( 針對(duì)從庫(kù)設(shè)置 slave_parallel_type= LOGICAL_CLOCK的情況 )
1> 5.6 --> 5.6
     基于 database 的并行復(fù)制 沒(méi)有問(wèn)題

2> 5.7 --> 5.7
     ① 開(kāi)啟GTID 的情況下,將組提交的 last_commited 和 seq num等信息記錄到 GTID 中;
     ② 未開(kāi)啟 GTID 的情況下 mysql5.7會(huì) 在每次提交events之前 set gtid_next='annonymous',因此會(huì)產(chǎn)生一個(gè)annonymous_gtid ,然后將組提交的 last_commited 和 seq num等信息記錄下來(lái) ,可以實(shí)現(xiàn)并行復(fù)制。

3> 5.6 --> 5.7
     ① 未開(kāi)啟 GTID 的情況下 ,mysql5.6 作為master 并不會(huì) 進(jìn)行 set gtid_mode='annonymous' 操作,故而不會(huì)有l(wèi)ast_commited 和 seq num ,mysql5.7 slave的并行復(fù)制設(shè)置失效(實(shí)際單線程執(zhí)行更新語(yǔ)句),不會(huì)報(bào)錯(cuò)。
     ② 開(kāi)啟 GTID 的情況下,倘若 master沒(méi)有并發(fā)事務(wù),并行復(fù)制設(shè)置失效(實(shí)際單線程執(zhí)行更新語(yǔ)句),則復(fù)制不報(bào)錯(cuò);若有并發(fā)事務(wù),則復(fù)制直接出錯(cuò),內(nèi)容如下圖(意思是 5.6的格式的events 到了5.7這里在設(shè)置 logical_clock的情況下無(wú)法識(shí)別)
        如何理解 mysql5.中的并行復(fù)制
以上 在 slave_parallel_type=DATABASE的情況下沒(méi)有問(wèn)題。
綜上,不要在 5.6--->5.7的同步中開(kāi)啟 logical_clock 模式的并行復(fù)制

看完上述內(nèi)容,你們掌握如何理解 mysql5.中的并行復(fù)制的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

網(wǎng)站題目:如何理解mysql5.中的并行復(fù)制
鏈接分享:http://chinadenli.net/article16/goejgg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷型網(wǎng)站建設(shè)網(wǎng)站收錄網(wǎng)站排名響應(yīng)式網(wǎng)站全網(wǎng)營(yíng)銷推廣網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

小程序開(kāi)發(fā)