最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深度解析MySQL中主從復制的詳細流程

 更新時間:2026年05月30日 09:32:19   作者:身如柳絮隨風揚  
在現(xiàn)代數(shù)據(jù)庫架構中,主從復制是實現(xiàn)讀寫分離、數(shù)據(jù)備份、高可用和故障轉移的基石,本文深入解析MySQL主從復制的機制與實踐,感興趣的小伙伴可以了解下

1. 引言

在現(xiàn)代數(shù)據(jù)庫架構中,主從復制(Master?Slave Replication)是實現(xiàn)讀寫分離、數(shù)據(jù)備份、高可用和故障轉移的基石。然而,許多開發(fā)者對復制的內部機制一知半解,尤其是半同步復制如何平衡性能與一致性。本文將帶你深入理解:

  • 主從復制的核心組件(binlog、relay log、I/O線程、SQL線程)
  • 配置主從復制的完整步驟
  • 半同步復制的工作流程與超時降級機制
  • 異步、半同步、全同步的對比與選型

通過流程圖和實戰(zhàn)案例,幫助你在生產環(huán)境中做出明智的選擇。

2. 主從復制核心架構

2.1 整體流程圖

2.2 核心組件

組件位置作用
binlog主庫記錄所有數(shù)據(jù)變更的二進制日志
binlog dump 線程主庫為每個從庫創(chuàng)建一個,負責發(fā)送 binlog 事件
I/O 線程從庫連接主庫,接收 binlog 并寫入 relay log
relay log從庫暫存從主庫接收的日志
SQL 線程從庫讀取 relay log 并重放執(zhí)行

3. 主從復制配置步驟

3.1 主庫配置

編輯 my.cnf

[mysqld]
server-id = 1                     # 唯一標識
log-bin = mysql-bin               # 開啟二進制日志
binlog_format = ROW               # 推薦 ROW 格式

創(chuàng)建復制賬號:

CREATE USER 'replica'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%';
FLUSH PRIVILEGES;

查看主庫狀態(tài)(記錄 FilePosition):

SHOW MASTER STATUS;

3.2 從庫配置

編輯 my.cnf

[mysqld]
server-id = 2
relay-log = mysql-relay-bin
read_only = 1                     # 可選,防止從庫被寫入

執(zhí)行同步命令:

CHANGE MASTER TO
  MASTER_HOST = 'master_ip',
  MASTER_USER = 'replica',
  MASTER_PASSWORD = 'password',
  MASTER_LOG_FILE = 'mysql-bin.000001',
  MASTER_LOG_POS = 12345;
START SLAVE;

檢查同步狀態(tài):

SHOW SLAVE STATUS\G

重點關注:

  • Slave_IO_Running: Yes
  • Slave_SQL_Running: Yes

4. 復制模式:異步、半同步、全同步

4.1 異步復制(默認)

主庫寫 binlog 后立即返回客戶端成功,不等待從庫確認。性能最高,但可能丟失數(shù)據(jù)(主庫宕機時未發(fā)送的 binlog 丟失)。

4.2 半同步復制

半同步復制在主庫提交事務前,至少等待一個從庫確認已收到 binlog(寫入 relay log)。這保證了至少一個從庫有完整的數(shù)據(jù)副本,大幅降低數(shù)據(jù)丟失風險。

工作流程

超時降級機制

如果從庫長時間不返回 ACK(如網(wǎng)絡故障),半同步復制會自動降級為異步復制,避免主庫阻塞。超時時間由參數(shù) rpl_semi_sync_master_timeout 控制(默認 10 秒)。降級后,主庫不再等待 ACK,恢復半同步需從庫重新連接并追趕數(shù)據(jù)。

配置半同步復制

主庫安裝插件并啟用:

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
SET GLOBAL rpl_semi_sync_master_enabled = 1;
SET GLOBAL rpl_semi_sync_master_timeout = 10000;  -- 10 秒

從庫安裝插件:

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
SET GLOBAL rpl_semi_sync_slave_enabled = 1;

4.3 全同步復制

所有從庫確認收到 binlog 后才提交,數(shù)據(jù)一致性最強,但性能極差,極少使用。

4.4 模式對比

模式數(shù)據(jù)一致性性能適用場景
異步低(可能丟數(shù)據(jù))最高非關鍵數(shù)據(jù)、日志系統(tǒng)
半同步較高(至少一個從庫有)金融、訂單等關鍵業(yè)務
全同步最高(所有從庫有)極低幾乎不用

5. 半同步復制的超時降級詳細解析

當主庫等待 ACK 超過 rpl_semi_sync_master_timeout 后,會暫時關閉半同步模式,退化為異步復制。此時主庫的 Rpl_semi_sync_master_status 狀態(tài)變?yōu)?OFF。從庫恢復后,主庫會嘗試重新進入半同步模式。

為什么要降級? 如果不降級,主庫將永遠阻塞,導致整個系統(tǒng)不可寫。降級機制保證了可用性優(yōu)先,同時盡可能保證一致性(降級期間仍有短暫數(shù)據(jù)丟失風險)。

監(jiān)控狀態(tài)

SHOW STATUS LIKE 'Rpl_semi_sync%';
  • Rpl_semi_sync_master_status:當前是否為半同步
  • Rpl_semi_sync_master_clients:活躍的半同步從庫數(shù)量
  • Rpl_semi_sync_master_yes_tx:成功半同步的事務數(shù)
  • Rpl_semi_sync_master_no_tx:降級為異步的事務數(shù)

6. 常見問題與最佳實踐

Q1:半同步復制下,從庫宕機會導致主庫不可用嗎?

不會。超時后自動降級為異步,主庫繼續(xù)服務,但在此期間數(shù)據(jù)一致性降低。

Q2:如何提升半同步復制的性能?

  • 使用專用網(wǎng)絡減少延遲。
  • 設置合理的 rpl_semi_sync_master_timeout(如 1~3 秒)。
  • 確保至少一個從庫在本地機房(低延遲)。
  • 監(jiān)控并優(yōu)化從庫重放速度(如開啟并行復制)。

Q3:半同步復制能保證完全不丟數(shù)據(jù)嗎?

不能。在降級為異步的時間窗口內,如果主庫宕機,尚未被從庫確認的事務仍可能丟失。真正的零丟失需要金融級的全同步或 Paxos/Raft 協(xié)議(如 MySQL Group Replication)。

Q4:配置半同步后,從庫需要額外注意什么?

從庫必須開啟 rpl_semi_sync_slave_enabled,并且 SHOW SLAVE STATUS 中的 Master_SSL_Allowed 不影響。

7. 總結

  • 主從復制是 MySQL 高可用架構的底座。
  • 異步復制性能最高,但存在數(shù)據(jù)丟失風險。
  • 半同步復制在一致性與性能間取得平衡,通過超時降級機制避免了主庫阻塞。
  • 關鍵參數(shù)rpl_semi_sync_master_timeout、rpl_semi_sync_master_wait_point(可選 AFTER_SYNC 等)。
  • 生產推薦:核心業(yè)務使用半同步復制 + 至少兩個從庫,并開啟監(jiān)控告警。

到此這篇關于深度解析MySQL中主從復制的詳細流程的文章就介紹到這了,更多相關MySQL主從復制內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 升級到mysql-connector-java8.0.27的注意事項

    升級到mysql-connector-java8.0.27的注意事項

    這篇文章主要介紹了升級到mysql-connector-java8.0.27的注意事項,凡是升級總會碰到點問題,換了連接器后部署果然報錯了,下面小編給大家分享解決方法,需要的朋友可以參考下
    2021-12-12
  • mysql_ssl_rsa_setup的具體使用

    mysql_ssl_rsa_setup的具體使用

    mysql_ssl_rsa_setup?是一個MySQL附帶的工具,用于自動創(chuàng)建SSL證書和密鑰文件,本文主要介紹了mysql_ssl_rsa_setup的具體使用,感興趣的可以了解一下
    2024-07-07
  • MySQL8.0新特性之支持原子DDL語句

    MySQL8.0新特性之支持原子DDL語句

    這MySQL 8.0開始支持原子數(shù)據(jù)定義語言(DDL)語句。此功能稱為原子DDL。這篇文章主要介紹了MySQL8.0新特性——支持原子DDL語句,需要的朋友可以參考下
    2018-07-07
  • 教你使用idea連接服務器mysql的步驟

    教你使用idea連接服務器mysql的步驟

    這篇文章主要介紹了如何使用idea連接服務器上的mysql,具體步驟本文給大家介紹的非常詳細,需要的朋友可以參考下
    2024-02-02
  • mysql 常用命令集錦[絕對精華]

    mysql 常用命令集錦[絕對精華]

    測試環(huán)境:mysql 5.0.45 【注:可以在mysql中通過mysql> SELECT VERSION();來查看數(shù)據(jù)庫版本】
    2009-06-06
  • 給MySQL表中的字段設置默認值的兩種方法

    給MySQL表中的字段設置默認值的兩種方法

    在MySQL中,我們可以為表的字段設置默認值,以確保在插入新記錄時,如果沒有為該字段指定值,將使用默認值,要為MySQL表中的字段設置默認值,我們可以在創(chuàng)建表時或者在已存在的表上使用ALTER TABLE語句進行修改,下面將展示兩種設置默認值的方法,需要的朋友可以參考下
    2023-11-11
  • MySQL中計算兩個日期的間隔天數(shù)方式

    MySQL中計算兩個日期的間隔天數(shù)方式

    文章介紹了在MySQL?5.7中計算兩個日期間隔天數(shù)的三種方法:DATEDIFF、TIMESTAMPDIFF和PERIOD_DIFF,并對比了它們的用途、參數(shù)和返回值類型
    2024-12-12
  • MySQL分區(qū)表的局限和限制詳解

    MySQL分區(qū)表的局限和限制詳解

    本文對Mysql分區(qū)表的局限性做了一些總結,因為個人能力以及測試環(huán)境的 原因,有可能有錯誤的地方,還請大家看到能及時指出,當然有興趣的朋友可以去官方網(wǎng)站查閱。
    2017-03-03
  • windows下忘記MySQL密碼的修改方法

    windows下忘記MySQL密碼的修改方法

    這篇文章主要介紹了windows下忘記MySQL密碼的修改方法,需要的朋友可以參考下
    2014-03-03
  • 解決1093 - You can‘t specify target table報錯問題及原因分析

    解決1093 - You can‘t specify target&n

    MySQL 1093錯誤因UPDATE/DELETE語句的FROM子句直接引用目標表或嵌套子查詢導致,解決方法包括使用臨時表、JOIN或EXISTS,避免直接操作表
    2025-07-07

最新評論

长乐市| 资兴市| 济南市| 乌拉特中旗| 平远县| 咸丰县| 天台县| 乐都县| 会理县| 天镇县| 会昌县| 珠海市| 西丰县| 无锡市| 西峡县| 理塘县| 师宗县| 衡阳市| 平武县| 青岛市| 双桥区| 承德市| 阿克陶县| 正镶白旗| 白山市| 水城县| 四平市| 峨眉山市| 兰考县| 陈巴尔虎旗| 林西县| 灌阳县| 福州市| 阳朔县| 乳源| 裕民县| 咸宁市| 平塘县| 焉耆| 苗栗市| 翁牛特旗|