主頁 > 知識庫 > MySQL是如何實(shí)現(xiàn)主備同步

MySQL是如何實(shí)現(xiàn)主備同步

熱門標(biāo)簽:沃克斯電梯外呼線路圖 地圖標(biāo)注被騙三百怎么辦 常州電銷外呼系統(tǒng)一般多少錢 400電話鄭州申請 北京人工外呼系統(tǒng)價(jià)錢 天智外呼系統(tǒng) 福州呼叫中心外呼系統(tǒng)哪家好 房產(chǎn)智能外呼系統(tǒng)品牌 云南語音外呼系統(tǒng)平臺

主備同步,也叫主從復(fù)制,是MySQL提供的一種高可用的解決方案,保證主備數(shù)據(jù)一致性的解決方案。

在生產(chǎn)環(huán)境中,會有很多不可控因素,例如數(shù)據(jù)庫服務(wù)掛了。為了保證應(yīng)用的高可用,數(shù)據(jù)庫也必須要是高可用的。

因此在生產(chǎn)環(huán)境中,都會采用主備同步。在應(yīng)用的規(guī)模不大的情況下,一般會采用一主一備。

除了上面提到的數(shù)據(jù)庫服務(wù)掛了,能夠快速切換到備庫,避免應(yīng)用的不可用外,采用主備同步還有以下好處:

提升數(shù)據(jù)庫的讀并發(fā)性,大多數(shù)應(yīng)用都是讀比寫要多,采用主備同步方案,當(dāng)使用規(guī)模越來越大的時(shí)候,可以擴(kuò)展備庫來提升讀能力。

備份,主備同步可以得到一份實(shí)時(shí)的完整的備份數(shù)據(jù)庫。

快速恢復(fù),當(dāng)主庫出錯(cuò)了(比如誤刪表),通過備庫來快速恢復(fù)數(shù)據(jù)。對于規(guī)模很大的應(yīng)用,對于數(shù)據(jù)恢復(fù)速度的容忍性很低的情況,通過配置一臺與主庫的數(shù)據(jù)快照相隔半小時(shí)的備庫,當(dāng)主庫誤刪表,就可以通過備庫和binlog來快速恢復(fù),最多等待半小時(shí)。

說了主備同步是什么和好處,下面讓我們來了解一下主備同步是怎么實(shí)現(xiàn)的。

主備同步的實(shí)現(xiàn)原理

我們先來了解一下主備同步的原理,下面以一個(gè)update語句來介紹主庫與備庫間是如何進(jìn)行同步的。

上圖是一個(gè)update語句在節(jié)點(diǎn)A執(zhí)行,然后同步到節(jié)點(diǎn)B的完整流程圖,具體步驟有:

  1. 主庫接受到客戶端發(fā)送的一條update語句,執(zhí)行內(nèi)部事務(wù)邏輯,同時(shí)寫binlog。
  2. 備庫通過 change master 命令,設(shè)置主庫的IP、端口、用戶名和密碼,以及要從哪個(gè)位置開始請求 binlog。這個(gè)位置包含文件名和偏移量。
  3. 在備庫上執(zhí)行start slave命令,啟動兩個(gè)線程 io_thread 和 sql_thread,其中 io_thread 負(fù)責(zé)與主機(jī)進(jìn)行連接。
  4. 主庫校驗(yàn)完用戶名和密碼,按照接收到的位置去讀取binlog,發(fā)給備庫。
  5. 備庫接收到binlog后,寫到本地文件(relay log,中轉(zhuǎn)文件)。
  6. 備庫讀取中轉(zhuǎn)文件,解析出命令,然后執(zhí)行。

主備同步的工作原理其實(shí)就是一個(gè)完全備份加上二進(jìn)制日志備份的還原。不同的是這個(gè)二進(jìn)制日志的還原操作基本上是實(shí)時(shí)的。

備庫通過兩個(gè)線程來實(shí)現(xiàn)同步:

  • 一個(gè)是 I/O 線程,負(fù)責(zé)讀取主庫的二進(jìn)制日志,并將其保存為中繼日志。
  • 一個(gè)是 SQL 線程,負(fù)責(zé)執(zhí)行中繼日志。

從上面的流程可以看出,主備同步的關(guān)鍵是binlog

常見的兩種主備切換流程

M-S結(jié)構(gòu)

M-S結(jié)構(gòu),兩個(gè)節(jié)點(diǎn),一個(gè)當(dāng)主庫、一個(gè)當(dāng)備庫,不允許兩個(gè)節(jié)點(diǎn)互換角色。

在狀態(tài)1中,客戶端的讀寫都直接訪問節(jié)點(diǎn)A,而節(jié)點(diǎn)B是A的備庫,只是將A的更新都同步過來,到本地執(zhí)行。這樣可以保持節(jié)點(diǎn)B和A的數(shù)據(jù)是相同的。

當(dāng)需要切換的時(shí)候,就切成狀態(tài)2。這時(shí)候客戶端讀寫訪問的都是節(jié)點(diǎn)B,而節(jié)點(diǎn)A是B的備庫。

雙M結(jié)構(gòu)

雙M結(jié)構(gòu),兩個(gè)節(jié)點(diǎn),一個(gè)當(dāng)主庫,一個(gè)當(dāng)備庫,允許兩個(gè)節(jié)點(diǎn)互換角色。

對比前面的M-S結(jié)構(gòu)圖,可以發(fā)現(xiàn),雙M結(jié)構(gòu)和M-S結(jié)構(gòu),其實(shí)區(qū)別只是多了一條線,即節(jié)點(diǎn)A和B之間總是互為主備關(guān)系。這樣在切換的時(shí)候就不用再修改主備關(guān)系。

雙M結(jié)構(gòu)的循環(huán)復(fù)制問題

在實(shí)際生產(chǎn)使用中,多數(shù)情況是使用雙M結(jié)構(gòu)的。但是,雙M結(jié)構(gòu)還有一個(gè)問題需要解決。

業(yè)務(wù)邏輯在節(jié)點(diǎn)A執(zhí)行更新,會生成binlog并同步到節(jié)點(diǎn)B。節(jié)點(diǎn)B同步完成后,也會生成binlog。(log_slave_updates設(shè)置為on,表示備庫也會生成binlog)。

當(dāng)節(jié)點(diǎn)A同時(shí)也是節(jié)點(diǎn)B的備庫時(shí),節(jié)點(diǎn)B的binlog也會發(fā)送給節(jié)點(diǎn)A,造成循環(huán)復(fù)制。

解決辦法:

  1. 設(shè)置節(jié)點(diǎn)的server-id,必須不同,不然不允許設(shè)置為主備結(jié)構(gòu)
  2. 備庫在接到binlog后重放時(shí),會記錄原記錄相同的server-id,即誰產(chǎn)生即為誰的。
  3. 每個(gè)節(jié)點(diǎn)在接受binlog時(shí),會判斷server-id,如果是自己的就丟掉。

解決后的流程:

  1. 業(yè)務(wù)邏輯在節(jié)點(diǎn)A執(zhí)行更新,會生成帶有節(jié)點(diǎn)A的server-id的binlog。
  2. 節(jié)點(diǎn)B接受到節(jié)點(diǎn)A發(fā)過來的binlog,并執(zhí)行完成后,會生成帶有節(jié)點(diǎn)A的server-id的binlog。
  3. 節(jié)點(diǎn)A接受到binlog后,發(fā)現(xiàn)是自己的,就丟掉。死循環(huán)就在這里斷掉了。

以上就是MySQL是如何實(shí)現(xiàn)主備同步的詳細(xì)內(nèi)容,更多關(guān)于MySQL 主備同步的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • MySQL GTID全面總結(jié)
  • MYSQL數(shù)據(jù)庫GTID實(shí)現(xiàn)主從復(fù)制實(shí)現(xiàn)(超級方便)
  • MySQL5.6 GTID模式下同步復(fù)制報(bào)錯(cuò)不能跳過的解決方法
  • Mysql GTID Mha配置方法
  • MySQL5.7不停業(yè)務(wù)將傳統(tǒng)復(fù)制變更為GTID復(fù)制的實(shí)例
  • 詳解MySQL主從復(fù)制實(shí)戰(zhàn) - 基于GTID的復(fù)制
  • MySQL 5.6 GTID新特性實(shí)踐
  • MySQL5.6基于GTID的主從復(fù)制
  • 在MySQL中使用GTIDs復(fù)制協(xié)議和中斷協(xié)議的教程
  • 關(guān)于mysql主備切換canal出現(xiàn)的問題解決
  • 基于mysql+mycat搭建穩(wěn)定高可用集群負(fù)載均衡主備復(fù)制讀寫分離操作
  • MySQL GTID主備不一致的修復(fù)方案

標(biāo)簽:黔東 拉薩 沈陽 珠海 移動 沈陽 鹽城 徐州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL是如何實(shí)現(xiàn)主備同步》,本文關(guān)鍵詞  MySQL,是,如何,實(shí)現(xiàn),主備,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL是如何實(shí)現(xiàn)主備同步》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySQL是如何實(shí)現(xiàn)主備同步的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章