| 角色 | IP | Server ID | 備註 |
|---|---|---|---|
| Master (A) | 10.1.1.1 | 1 | 主寫入 |
| Slave (B) | 10.1.1.2 | 2 | 備讀取/故障接管 |
[mysqld]
server-id=1
log-bin=mysql-bin
# 可選:binlog-do-db=target_db 只記錄特定庫
GRANT FILE ON *.* TO 'replicate'@'10.1.1.2' IDENTIFIED BY 'pass'; FLUSH PRIVILEGES;FLUSH TABLES WITH READ LOCK; mysqldump --all-databases --master-data=2 > snapshot.sql; UNLOCK TABLES;snapshot.sql 到 Slave,導入[mysqld]
server-id=2
master-host=10.1.1.1
master-user=replicate
master-password=pass
master-port=3306
master-connect-retry=60
replicate-do-db=target_db
START SLAVE;SHOW SLAVE STATUS\G → Slave_IO_Running: Yes、Slave_SQL_Running: Yes、Seconds_Behind_Master: 0log-bin=mysql-bin,重啟GRANT FILE ON *.* TO 'replicate'@'10.1.1.1' IDENTIFIED BY 'pass';master-host=10.1.1.2
master-user=replicate
master-password=pass
**注意**:雙主**不支援雙寫** (自增衝突、數據衝突),僅作**故障切換備用**。寫入始終單點,或用 auto_increment_offset/increment 錯開 ID (但業務邏輯仍衝突)。
function db_connect() {
$link = @mysql_connect('10.1.1.1', 'user', 'pass', true); // 新連接
if ($link) return $link;
// Master 掛了,連 Slave
$link = @mysql_connect('10.1.1.2', 'user', 'pass', true);
if ($link) {
error_log('MySQL Master down, switched to Slave at ' . date('Y-m-d H:i:s'));
return $link;
}
die('Both MySQL servers unreachable');
}
**缺陷**:
| 方案 | 架構 | 故障轉移 | 數據一致性 | 運維複雜度 |
|---|---|---|---|---|
| 原生雙主 + 腳本 | Active-Passive | 手動/腳本 (分鐘級) | 半同步/異步 (可能丟數據) | 低 |
| MHA (Master High Availability) | Active-Passive + Manager | 自動 (秒級) | Binlog 補償、差異修復 | 中 |
| Orchestrator | 拓撲管理 + 故障轉移 | 自動/手動、Web UI | GTID 追同步 | 中 |
| InnoDB Cluster / Group Replication | Multi-Primary / Single-Primary | 自動 (Paxos 共識、毫秒級) | 強一致 (多數派) | 高 (需 3+ 節點) |
| ProxySQL + Orchestrator | 讀寫分離 + 連接池 + 故障轉移 | 透明、無感知 | 配合 GTID/Group Replication | 高 |
| 云托管 | RDS/Aurora/Cloud SQL | 全托管、SLA 保障 | 跨 AZ 同步/異步可選 | 零運維 |
gtid_mode=ON、enforce_gtid_consistency=ON,簡化故障轉移定位rpl_semi_sync_master=ON、rpl_semi_sync_slave=ON,至少一備確認收到 Binlog 才提交,**RPO≈0**Seconds_Behind_Master > 30、Slave_IO_Running != Yes、Relay_Log_Space > 1GB 即時告警MySQL 內建復制是高可用的**地基**,而非成品。從文中「PHP 輪詢切換」到今日「Group Replication + ProxySQL + 雲托管」,核心演進是:**從人工腳本 → 自動化工具 → 共識協議 → 全托管服務**。無論架構如何升級,**GTID + 半同步 + 監控演練 + 異地備份** 四件套永遠是高可用的鋼筋骨架。