MySQL復(fù)制相關(guān)(持續(xù)更新)

一、異步復(fù)制

異步復(fù)制原理圖

after commit
  • master:
    • Dump_Thread垒拢,通知IO_Thread數(shù)據(jù)變更
  • slave:
    • IO_Thread旬迹,拉取binlog增量
    • SQL_Thread,SQL邏輯重放

異步復(fù)制流程

  1. master 寫undo求类、redo
  2. master 發(fā)起commit奔垦,寫binlog(filename,position)
  3. master 完成提交事務(wù)
  4. slave 通過(guò)IO_Thread拉取binlog的filename尸疆,position椿猎,并寫入到本地的relaylog中
  5. slave 通過(guò)SQL_Thread邏輯重放relaylog中的SQL(單線程)

兩種場(chǎng)景

  1. 實(shí)時(shí)同步(IO_Thread主從沒(méi)有延遲),寫數(shù)據(jù)之前通知IO_Thread有變更寿弱,IO_Thread拉取binlog增量
  2. 主從長(zhǎng)時(shí)間延遲(全備恢復(fù))犯眠,IO_Thread直接去主庫(kù)本地磁盤拉取binlog增量

復(fù)制中的坑

  1. row模式下,表最好是有主鍵症革,其次要有普通索引筐咧。否則sql_thread重放需要全表掃描匹配,速度非常慢(mysql5.7中做了優(yōu)化)


    sql_thread重放

二噪矛、半同步復(fù)制(MySQL 5.5 after commit)

半同步復(fù)制流程圖

after commit

半同步復(fù)制流程

  1. master 寫undo嗜浮、redo
  2. master 發(fā)起commit,sync binlog(filename摩疑,position)
  3. master 存儲(chǔ)引擎commit完成
  4. master_sender_thread 等待slave_reciver_thread返回ack(等待過(guò)程中會(huì)阻塞下一個(gè)事務(wù))
  5. master_sender_thread接收到slave_reciver_thread返回的ack,并返回給客戶端畏铆,客戶端才可以繼續(xù)操作

after帶來(lái)的三個(gè)問(wèn)題

  1. 性能問(wèn)題:AFTER_COMMIT半同步是單線程處理的雷袋,master把事務(wù)發(fā)送完畢后,要接受和處理slave的ack應(yīng)答辞居,處理完ack后才能繼續(xù)發(fā)送下一個(gè)事務(wù)楷怒,對(duì)性能影響比較大
  2. master commit完成后才開始等待slave的ACK,其實(shí)這個(gè)時(shí)候在master上事務(wù)已經(jīng)提交完成并且其他客戶端已經(jīng)可以讀到瓦灶,只是提交該事物的客戶端處于等待狀態(tài)鸠删。
  3. 如果master等待ack時(shí)master crash,而slave又未接收到該事務(wù)的話贼陶,那么切換到從庫(kù)后就會(huì)出現(xiàn)讀取的結(jié)果不一致的情況(因?yàn)橹鲙?kù)已commit而從庫(kù)未收到該事務(wù)binlog)

三刃泡、增強(qiáng)半同步復(fù)制(MySQL 5.7 after sync)

增強(qiáng)半同步復(fù)制流程圖

after sync

增強(qiáng)半同步復(fù)制流程

  1. master 寫undo巧娱、redo
  2. master 發(fā)起commit,sync binlog(filename烘贴,position)
  3. master 通過(guò)單獨(dú)的semisync_reciver_thread等待slave_reciver_thread返回ack禁添,此過(guò)程中master_sender_thread可以處理其他事務(wù)的請(qǐng)求
  4. semisync_reciver_thread接收到slave_reciver_thread返回的ack,并返回給客戶端
  5. master 存儲(chǔ)引擎層commit

增強(qiáng)半同步解決的問(wèn)題

  1. AFTER_SYNC采用雙工處理桨踪,master采用單獨(dú)semisync_reciver_thread處理ack應(yīng)答老翘,不阻塞其他事務(wù),提升性能
  2. AFTER_SYNC等待ack的操作是在引擎層commit之前處理锻离,避免了其他客戶端臟讀
  3. 在等待ack的期間master crash铺峭,由于master引擎層未commit,如果slave未接受到該事務(wù)汽纠,那么數(shù)據(jù)是一致的

增強(qiáng)半同步帶來(lái)的新問(wèn)題

極端情況:在master sync binlog(寫入xid)后卫键,且在發(fā)送日志之前,這個(gè)時(shí)間master crash了疏虫。那么slave是沒(méi)有拿到master的binlog增量的永罚,而master重啟后的crash recovery會(huì)認(rèn)為該事務(wù)已寫到binlog中,然后進(jìn)行重做卧秘。這樣就會(huì)導(dǎo)致主從不一致

5.7增強(qiáng)半同步配置

  1. master
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%semi%';
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
set global rpl_semi_sync_master_enabled=ON;
  1. slave
 install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
  set global rpl_semi_sync_slave_enabled=ON;
  1. 主要參數(shù)
  • mster:
    • rpl_semi_sync_master_enabled=ON 表示在master上已經(jīng)開啟半同步復(fù)制模式呢袱。
    • rpl_semi_sync_master_timeout=10000 該參數(shù)默認(rèn)為10000毫秒,即10秒翅敌,可以調(diào)整羞福,表示如果主庫(kù)在某次事務(wù)中等待事件超過(guò)10秒,則降級(jí)為異步復(fù)制模式蚯涮,不再等待slave治专,如果master探測(cè)到slave恢復(fù),則會(huì)自動(dòng)回到半同步模式遭顶。
    • rpl_semi_sync_master_wait_no_slave=ON 表示是否允許master每個(gè)事務(wù)提交后都要等待slave的確認(rèn)信號(hào)张峰,默認(rèn)是ON,即每一個(gè)事務(wù)都會(huì)等待棒旗,如果是OFF喘批,則slave追趕上之后,也不會(huì)回到半同步模式铣揉。
    • rpl_semi_sync_master_trace_level=32 表示開啟半同步復(fù)制模式時(shí)的調(diào)試級(jí)別饶深,默認(rèn)是32
  • slave:
    • rpl_semi_sync_slave_enabled=ON
    • rpl_semi_sync_master_trace_level=32

四、并行復(fù)制

并行復(fù)制的演變

  • MySQL 5.6 是基于庫(kù)級(jí)別的并行復(fù)制(適用于單實(shí)例多庫(kù)而且?guī)熘g的寫入分布比較平均的情況逛拱,比較雞肋敌厘,可以忽略)
  • MySQL 5.7 是基于事務(wù)級(jí)別的并行復(fù)制(主要介紹)
  • MySQL 8.0 是基于行級(jí)別的并行復(fù)制(太新還沒(méi)來(lái)得及研究,后面補(bǔ)上)

MySQL 5.7基于行的并行復(fù)制

原理:
與組提交結(jié)合朽合,一個(gè)組提交的事務(wù)都是可以并行回放俱两,因?yàn)檫@些事務(wù)都已進(jìn)入到事務(wù)的prepare階段饱狂,則說(shuō)明事務(wù)之間沒(méi)有任何沖突(否則就不可能提交)。

復(fù)制中的重要參數(shù)

  • log-bin = /binlog_dir
  • binlog_format = row
  • binlog_row_image = full //默認(rèn)full
  • gtid_mode = on
  • enforce_gtid_consistency = on //打開gtid之前必須打開此選項(xiàng)锋华,服務(wù)器通過(guò)允許僅執(zhí)行可使用GTID安全記錄的語(yǔ)句來(lái)強(qiáng)制執(zhí)行GTID一致性(開啟后強(qiáng)制檢測(cè)gtid一致性嗡官,在事務(wù)中更改非事務(wù)表將會(huì)報(bào)錯(cuò))
  • binlog_group_commit_sync_delay = 100 //單位(微秒)。如果不啟用組提交毯焕,則每次提交一個(gè)事務(wù)衍腥,binlog做一次fsync。如果啟用了binlog-group-commit纳猫,此時(shí)sync_binlog=N代表每N組事務(wù)婆咸,而不是每N個(gè)事務(wù)。建議設(shè)置sync_binlog=1
  • binlog_group_commit_sync_no_delay_count = 10
  • binlog_order_commit = off //開啟后事務(wù)提交順序與binlog順序一致芜辕,默認(rèn)on尚骄,設(shè)置為off則事務(wù)可并行提交,對(duì)數(shù)據(jù)一致性可能產(chǎn)生影響侵续。如果啟用了binlog-group-commit倔丈,則設(shè)置為off
  • transaction_write_set_extraction = on //8.0特性,5.7默認(rèn)off
  • binlog_transation_dependency_tracking = COMMIT_ORDER //等同于打開binlog_order_commit状蜗,基于行級(jí)別并行復(fù)制配置成writeset_session
  • binlog_transation_dependency_history_size = 25000 //控制隊(duì)列長(zhǎng)度
  • slave_net_timeout = 20|30 //io_thread超時(shí)時(shí)間
  • log_slave_updates
  • slave_parallel_type = LOGICAL_CLOCK //從庫(kù)開啟并行復(fù)制
  • slave_parallel_type = 4|8
  • slave_preserve_commit_order = on //保證從庫(kù)提交順序與主庫(kù)一致需五,前置條件log-bin,log_slave_update轧坎,slave_parallel_type = LOGICAL_CLOCK
  • slave_rows_search_algorithms = TABLE_SCAN,INDEX_SCAN //配置成INDEX_SCAN,HASH_SCAN宏邮,當(dāng)沒(méi)主鍵的表復(fù)制中可以用hash索引
  • relay_log_info_reposity = table //crash-safe replication
  • sync_relay_log_info = 1
  • relay_log_recovery = 1
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市缸血,隨后出現(xiàn)的幾起案子蜜氨,更是在濱河造成了極大的恐慌,老刑警劉巖捎泻,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件飒炎,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡笆豁,警方通過(guò)查閱死者的電腦和手機(jī)厌丑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)渔呵,“玉大人,你說(shuō)我怎么就攤上這事砍鸠±┣猓” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵爷辱,是天一觀的道長(zhǎng)录豺。 經(jīng)常有香客問(wèn)我朦肘,道長(zhǎng),這世上最難降的妖魔是什么双饥? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任媒抠,我火速辦了婚禮,結(jié)果婚禮上咏花,老公的妹妹穿的比我還像新娘趴生。我一直安慰自己,他們只是感情好昏翰,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布苍匆。 她就那樣靜靜地躺著,像睡著了一般棚菊。 火紅的嫁衣襯著肌膚如雪浸踩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天统求,我揣著相機(jī)與錄音检碗,去河邊找鬼。 笑死码邻,一個(gè)胖子當(dāng)著我的面吹牛折剃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播冒滩,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼微驶,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了开睡?” 一聲冷哼從身側(cè)響起因苹,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎篇恒,沒(méi)想到半個(gè)月后扶檐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡胁艰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年款筑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腾么。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡奈梳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出解虱,到底是詐尸還是另有隱情攘须,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布殴泰,位于F島的核電站于宙,受9級(jí)特大地震影響浮驳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜捞魁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一至会、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧谱俭,春花似錦奉件、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至宣吱,卻和暖如春窃这,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背征候。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工杭攻, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人疤坝。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓兆解,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親跑揉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子锅睛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 一、復(fù)制架構(gòu)衍生史 在談這個(gè)特性之前历谍,我們先來(lái)看看MySQL的復(fù)制架構(gòu)衍生史现拒。 在2000年,MySQL 3.23...
    張偉科閱讀 11,278評(píng)論 0 9
  • https://www.cnblogs.com/along21/p/8011596.html https://bl...
    SkTj閱讀 3,122評(píng)論 1 4
  • mysql主從復(fù)制 主從復(fù)制慨述 構(gòu)建大型望侈,高性能應(yīng)用程序的基礎(chǔ)主服務(wù)器復(fù)制負(fù)責(zé)更新印蔬,且將更新寫入二進(jìn)制日志文件,...
    肖金光xjg閱讀 875評(píng)論 0 1
  • 這次學(xué)習(xí)內(nèi)容中好多提到地球環(huán)境脱衙,因?yàn)橄胍嘟拟辉#K于威脅到自己賴以生存的地球環(huán)境捐韩。這點(diǎn)讓我想起看過(guò)的一...
    嚴(yán)露露閱讀 167評(píng)論 0 0
  • 唐巧:http://blog.devtang.com/blog/archives/ 王巍:http://www.o...
    蒼家有井名為空閱讀 628評(píng)論 0 2