MySQL 5.5 引入半同步複制作為異步與全同步的折中方案,確保「已提交事務至少存在於主庫與一台從庫」,兼顧數據安全與性能。本文系統梳理其定義、優缺點、核心特性、異常處理機制,為後續 5.7 增強版優化奠定基礎。
| 模式 | 主庫行為 | 數據安全性 | 延遲影響 |
|---|---|---|---|
| 異步 | 寫 binlog 即返回成功,不等待從庫 | 低(主庫崩潰可能丟數據) | 無 |
| 全同步 | 等待所有從庫應用事務並確認 | 最高 | 極大(受最慢從庫拖累) |
| 半同步 | 等待至少一台從庫確認「收到並寫入 relay log 刷盤」 | 高(雙副本落盤) | 中等(單次網絡 RTT) |
主庫提交事務後,阻塞會話線程,直到:
或發生超時(rpl_semi_sync_master_timeout,預設 10 秒),自動降級為異步複制。

sync_relay_log=1 才算真正落盤,防止 OS cache 丟失。主庫超時後自動降級異步,錯誤日誌記錄:Timeout waiting for reply of binlog ... Semi-sync replication switched OFF.
主庫崩潰時,可能存在「已在主庫提交、未傳至從庫」的事務:
應對:建立主備校驗機制,故障轉移前比對 binlog position / GTID,必要時從主庫恢復補全。
半同步複制以「可接受的性能代價」換取「雙副本落盤」的數據安全,是生產環境主流高可用架構的基石。MySQL 5.7 進一步通過異步化架構與可配置等待點,大幅提升了高併發場景下的可用性與靈活性。