基礎單向複制配置
主庫
[mysqld]
server-id = 1
log_bin = mysql-bin
binlog_format = ROW
gtid_mode = ON
enforce_gtid_consistency = ON
binlog_expire_logs_seconds = 604800 -- 7 天
-- 建立複制用戶
CREATE USER 'repl'@'%' IDENTIFIED BY 'strong_pass';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
從庫
[mysqld]
server-id = 2
log_bin = mysql-bin
relay_log = relay-bin
gtid_mode = ON
enforce_gtid_consistency = ON
read_only = 1
super_read_only = 1
-- 設定主庫連線(GTID 模式無需檔案/位置)
CHANGE MASTER TO
MASTER_HOST = '10.0.0.1',
MASTER_USER = 'repl',
MASTER_PASSWORD = 'strong_pass',
MASTER_AUTO_POSITION = 1;
START SLAVE;
雙主 / 多主架構
-- 兩台互為主從
-- Server A: server-id=1, auto_increment_offset=1, auto_increment_increment=2
-- Server B: server-id=2, auto_increment_offset=2, auto_increment_increment=2
-- 防衝突:唯一鍵業務層保證,或用 Galera Cluster / Group Replication
關鍵監控指令
| 指令 | 用途 |
SHOW MASTER STATUS | 主庫 Binlog 位置/GTID |
SHOW SLAVE STATUS\G | 從庫完整狀態(核心) |
SHOW SLAVE HOSTS | 主庫查看已連線從庫 |
SHOW BINLOG EVENTS | 解析 Binlog 事件 |
SHOW RELAYLOG EVENTS | 解析 Relay Log |
SHOW SLAVE STATUS 關鍵欄位
Slave_IO_Running: Yes -- IO 執行緒(接收 Binlog)
Slave_SQL_Running: Yes -- SQL 執行緒(重放)
Seconds_Behind_Master: 0 -- 延遲秒數
Last_IO_Error: -- IO 錯誤詳情
Last_SQL_Error: -- SQL 錯誤詳情
Retrieved_Gtid_Set: -- 已接收 GTID 集合
Executed_Gtid_Set: -- 已執行 GTID 集合
常見故障處理
| 故障 | 診斷 | 處理 |
| IO 執行緒停止 | Last_IO_Error: connection refused | 檢查網路、防火牆、主庫 bind-address、用戶權限 |
| SQL 執行緒停止 | Last_SQL_Error: Duplicate entry | SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE; 或修復數據衝突 |
| 延遲過大 | Seconds_Behind_Master > 300 | 檢查長事務、大查詢、從庫硬體、parallel replication |
| GTID 不一致 | Executed_Gtid_Set 缺漏 | 重新同步:RESET SLAVE; CHANGE MASTER TO ... MASTER_AUTO_POSITION=1 |
高可用架構升級
- MHA:Manager + Node,自動故障切換(Perl)
- Orchestrator:拓撲管理、自動遷移、Web UI(Go)
- Group Replication:官方多主 Paxos 協議(5.7.17+)
- InnoDB Cluster:Group Replication + Router + Shell 整合方案
備份策略整合
-- 從庫備份不影響主庫
mysqldump --single-transaction --master-data=2 --gtid-purged=ON ...
-- 還原後同步
CHANGE MASTER TO MASTER_AUTO_POSITION=1;
START SLAVE UNTIL SQL_AFTER_GTIDS='gtid_set';
- 上一篇文章: InnoDB 動態陣列內部實現深度解析:dyn0dyn.c 核心資料結構與記憶體管理
- 下一篇文章: MySQL INSERT/REPLACE/LOAD DATA 資料寫入全方位指南:語法、效能、批次策略與陷阱
Copyright ©
程式碼之家 All Rights Reserved