偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

面試官:MySQL雙主架構有什么優(yōu)缺點?

數(shù)據(jù)庫 MySQL
本文介紹了 MySQL 雙主架構的多種復制架構,雙主架構需要注意解決循環(huán)復制、單點故障問題,同時做好數(shù)據(jù)權限劃分。

大家好,我是君哥。

雙主架構是 MySQL 常見的一種架構模式,它的特點是有兩個主節(jié)點對外提供服務,并且這兩個主節(jié)點互為主備。今天來學習一下雙主架構。

1.雙主復制

這種架構的特點配置兩個主庫,每個主庫都提供讀寫服務,并且這兩個主庫互為主備。如下圖:

在 M1 寫入的數(shù)據(jù)要同步到 M2,在 M2 寫入的數(shù)據(jù)要同步到 M1。這種兩個主庫同時支持寫入,這種架構模式一個明顯的優(yōu)勢寫入效率高。比如一個應用在不同的城市部署了兩個主節(jié)點,請求可以就近選擇寫入數(shù)據(jù)庫。

但這種架構在數(shù)據(jù)同步時很容易出問題。

案例一:M1 和 M2 同時收到一張表的插入請求,這張表是自增主鍵,兩張表插入后主鍵相同。這時發(fā)生數(shù)據(jù)同步,這條插入語句在 binlog 里面記錄的是 row 格式,同步時發(fā)生主鍵沖突。

MySQL binlog 有三種格式:

  • STATEMENT:記錄的是 SQL 語句本身;
  • ROW:記錄的是數(shù)據(jù)的變化;
  • MIXED:STATEMENT 和 ROW 格式的結合,MySQL 會根據(jù) SQL 語句特性選擇使用 STATEMENT 還是 ROW 格式。

MySQL 5.0 后可以通過設置 auto_increment_increment 和 auto_increment_offset 這兩個選項來解決這個問題。

案例二:在 M1 上執(zhí)行了一條語句,生成 binlog 后發(fā)給 M2 進行同步,M2 執(zhí)行完成后又生成 binlog 同步給 A,導致一條語句循環(huán)復制。

這個問題的解決方法是要求 M1 和 M2 的 server id不相同,M1 產(chǎn)生的 binlog 記錄 server id 是 M1,M2 執(zhí)行同步時生成的 binlog 也記錄 server id 為 M1。這樣同步給 M1 是,M1 判斷到 server id 跟自己相同,就丟棄這個日志,不做同步。

案例三:同步過程中會有數(shù)據(jù)不一致的問題。比如用戶 xiaoming 的賬戶余額是 100。M1 執(zhí)行了 update 操作把賬戶余額更新成 150,M2 執(zhí)行了 update 操作更新成 130。

解決這種數(shù)據(jù)不一致問題的一個思路是嚴格劃分數(shù)據(jù)和設置權限,比如案例中小明的所有數(shù)據(jù)只能在 M1 上操作。

案例四:因為節(jié)點發(fā)生故障,M1 不能復制了,但是應用可以寫數(shù)據(jù)庫,M2 能正常寫和復制,這個問題就很難解決了。

解決這個問題,需要給 M1 和 M2 配置從節(jié)點,主節(jié)點故障后切換到從節(jié)點進行工作。

2.主備復制

這個架構模式的特點是雙主節(jié)點中,同一時刻只有一個主節(jié)點提供寫服務,另一個主節(jié)點只能提供讀服務。如下圖:

這個架構相當于比單主節(jié)點架構多了一個熱備,有如下優(yōu)勢:

  • 因為 M1 和 M2 配置對稱,切換主備比較容易;
  • 有助于故障轉移和恢復;
  • 可以在不影響應用的情況下進行數(shù)據(jù)庫升級和維護;
  • 不用考慮循環(huán)復制問題和主備不一致問題。

當然,主備架構也有缺點,那就是寫性能不能得到提升。

3.主主架構擁有備庫

主主架構中每個主庫也可以擁有備庫,如下圖:

這種配置為每個主庫增加了一個備份,可以防止單點故障,同時備庫也可以處理讀請求,提高數(shù)據(jù)庫整體讀效率。

這個架構的缺點是增加了機器成本。

4.環(huán)形復制

環(huán)形復制架構是 MySQL 集群中擁有多個主庫,主庫之間形成一個環(huán)形,前面一個節(jié)點是當前節(jié)點的主庫,當前節(jié)點是前面節(jié)點的備庫,也是后面一個節(jié)點的主庫。如下圖:

環(huán)形復制這種架構其實并不推薦,因為它很難做到故障轉移,高可用特性依賴于每個節(jié)點不出故障。但是如果一個節(jié)點出了故障,去掉這個節(jié)點,這個節(jié)點產(chǎn)生的 binlog 將一直循環(huán)復制下去,因為只有通過這個節(jié)點的 server id 才能做出判斷停止復制。

5.總結

本文介紹了 MySQL 雙主架構的多種復制架構,雙主架構需要注意解決循環(huán)復制、單點故障問題,同時做好數(shù)據(jù)權限劃分。

責任編輯:姜華 來源: 君哥聊技術
相關推薦

2025-03-26 01:25:00

MySQL優(yōu)化事務

2021-10-19 08:07:21

微信小程序代碼

2022-12-05 08:12:31

net/http庫http連接池

2025-04-01 00:00:00

項目CRUD單例模式

2022-08-24 07:06:36

SpringSetter項目

2021-12-10 12:01:37

finalfinallyfinalize

2024-04-03 15:33:04

JWTSession傳輸信息

2024-09-19 08:42:43

2021-11-30 07:44:50

FinalFinallyFinalize

2024-09-09 08:30:56

代碼

2021-12-20 10:30:33

forforEach前端

2023-02-17 08:10:24

2021-07-06 07:27:45

React元素屬性

2020-08-24 10:55:41

數(shù)據(jù)庫雙寫代碼

2021-06-01 08:25:06

Node.jsJavaScript運行

2023-02-20 08:08:48

限流算法計數(shù)器算法令牌桶算法

2025-09-26 07:58:58

2025-08-04 08:05:28

2024-08-28 11:58:02

2023-07-11 08:40:02

IO模型后臺
點贊
收藏

51CTO技術棧公眾號