MySQL是如何實現主備同步

2022-09-24 14:12:14 字數 1244 閱讀 6405

主備同步,也叫主從複製,是mysql提供的一種高可用的解決方案,保證主備資料一致性的解決方案。

在生產環境中,會有很多不可控因素,例如資料庫服務掛了。為了保證應用的高可用,資料庫也必須要是高可用的。

因此在生產環境中,都會採用主備同步。在應用的規模不大的情況下,一般會採用一主一備。

除了上面提到的資料庫服務掛了,能夠快速切換到備庫,避免應用的不可用外,採用主備同步還有以下好處:

提公升資料庫的讀併發性,大多數應用都是讀比寫要多,採用主備同步方案,當使用程式設計客棧規模越來越大的時候,可以擴充套件備庫來提公升讀能力。

備份,主備同步可以得到乙份實時的完整的備份資料庫。

快速恢復,當主庫出錯了(比如誤刪表),通過備庫來快速恢復資料。對於規模很大的應用,對於資料恢復速度的容忍性很低的情況,通過配置一台與主庫的資料快照相隔半小時的備庫,當主庫誤刪表,就可以通過備庫和binlog來快速恢復,最多等待半小時。

說了主備同步是什麼和好處,下面讓我們來了解一下主備同步是怎麼實現的。

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

上圖是乙個update語句在節點a執行,然後同步到節點b的完整流程圖,具體步驟有:

程式設計客棧

主備同步的工作原理其實就是乙個完全備份加上二進位制日誌備份的還原。不同的是這個二進位制日誌的還原操作基本上是實時的。

備庫通過兩個執行緒來實現同步:

從上面的流程可以看出,主備同步的關鍵是binlog

m-s結構,兩個節點,乙個當主庫、乙個當備庫,不允許兩個節點互換角色。

在狀態1中,客戶端的讀寫都直接訪問節點a,而節點b是a的備庫,只是將a的更新都同步過來,到本地執行。這樣可以保持節點b和a的資料是相同的。

當需要切換的時候,就切成狀態2。這時候客戶端讀寫訪問的都是節點b,而節點a是b的備庫。

雙m結構,兩個節點,乙個當主庫,乙個當備庫,允許兩個節點互換角色。

對比前面的m-s結構圖,可以發現,雙m結構和m-s結構,其實區別只是多了一條線,即節點a和b之間總是互為主備關係。這樣在切換的時候就不用再修改主備關係。

在實際生產使用中,多數情況是使用雙m結構的。但是,雙m結構還有乙個問題需要解決。

業務邏輯在節點a執行更新,會生成binlog並同步到節點b。節點b同步完成後,也會生成binlog。(log_sl**e_updates設定為on,表示備庫也會生成binlog)。

當節點a同時也是節點b的備庫時,節點b的binlog也會傳送給節點a,造成迴圈複製。

解決辦法:

解決後的流程:

gitlab主備同步 gitlab主備同步

主 10.10.10.75 備 10.10.10.16 方案思路 mysql主從同步 gitlab檔案目錄同步 inotify rsync 一,配置mysql主從同步 mysql版本 5.5.43 修改75的mysql配置檔案 vim etc mysql my.cnf server id 1 bin...

DM 雙中心如何實現主備路徑

一.dm 單雲雙中心 a.通過修改兩個中心的tunnel介面的ospf cost值,只能影響中心身後路由器去往spoke的路由選路 b.通過修改兩個中心身後物理介面的ospf cost值不同,可以影響spoke選擇不同的hub去往中心身後網路 c.因為只有一條虛擬隧道,不能通過調整spoke的隧道介...

keepalived實現主備切換

wget tar zxvf keepalived 1.2.18 tar.gz c usr local yum install y openssl openssl devel cd keepalived 1.2.18 configure prefix usr local keepalived make...