承接上篇單向主從 (A→B),本篇構建**雙主互備**:B 也開啟 Binlog 並授權 A 讀取,A 配置 CHANGE MASTER TO 指向 B,實現雙向複寫。並給出應用層首版容錯連線邏輯(無超時,後續改進)。
my.cnf [mysqld] 區段加入 log-bin,重啟 MySQL。GRANT FILE ON *.* TO 'replicate'@'10.1.1.1' IDENTIFIED BY 'password';FLUSH PRIVILEGES;my.cnf 加入:master-host=10.1.1.2master-user=replicatemaster-password=password結果:A 寫入 → 複寫到 B;B 寫入 → 複寫到 A。**任一節點寫入均同步到另一節點**。
| 故障類型 | 現象 | 切換行為 |
|---|---|---|
| MySQL 進程掛掉 (mysqld down,OS 存活) | Port 3306 拒絕連線 | mysql_connect 立即返回 false,**毫秒級切換成功** |
| 整機掛掉 / 網路不通 (OS down / 網路斷開) | TCP SYN 無回應 | mysql_connect **無限阻塞**(預設無連線超時),PHP-FPM 進程掛起,實測 2 分鐘未返回 |
結論:**必須在應用層實現連線超時**,否則單點故障擴大為應用層雪崩。下一篇將給出 fsockopen 改進版。
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1 或重做)。auto_increment 值 → 主鍵衝突停止複寫。生產建議:**雙主僅作高可用(單寫單備)**,寫入強制導向 Active Master,由 Orchestrator/MHA 管理角色切換。