標準化部署步驟、關鍵參數、驗證指標與故障排查清單,確保複制穩定可靠。
CHANGE MASTER。# Master (192.168.1.100) [mysqld] server-id = 1 log-bin = mysql-bin binlog_format = ROW binlog-do-db = test binlog-ignore-db = mysql sync_binlog = 1 gtid_mode = ON enforce_gtid_consistency = ON # Slave (192.168.1.101) [mysqld] server-id = 2 relay_log = relay-bin replicate-do-db = test replicate-ignore-db = mysql gtid_mode = ON enforce_gtid_consistency = ON read_only = 1 # 防止誤寫入 super_read_only = 1 # 5.7.8+ 僅 super 權限可寫
# 1. 主庫建立複制帳號 CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY 'StrongPass@123'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%'; FLUSH PRIVILEGES; # 2. 主庫備份(熱備 xtrabackup 或邏輯備份) # 此處示範 xtrabackup 流式傳輸 innobackupex --stream=xbstream --user=root --password=xxx ./ | ssh 192.168.1.101 "xbstream -x -C /var/lib/mysql" # 3. 從庫啟動、設定 GTID 複制 systemctl start mysqld mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.100', MASTER_USER='repl', MASTER_PASSWORD='StrongPass@123', MASTER_AUTO_POSITION=1; -- GTID 自動定位 START SLAVE; # 4. 驗證 SHOW SLAVE STATUS\G # Slave_IO_Running: Yes # Slave_SQL_Running: Yes # Retrieved_Gtid_Set / Executed_Gtid_Set 同步推進 # Seconds_Behind_Master: 0
# 兩庫均設定 auto_increment_increment = 2 auto_increment_offset = 1 # Master A auto_increment_offset = 2 # Master B # 防止雙寫衝突:業務層路由同一實體單寫、或用行級鎖協調
| 現象 | 排查指令 | 典型原因 | 處置 |
|---|---|---|---|
| IO_Running=No | telnet Master 3306; SHOW SLAVE STATUS\G Last_IO_Error | 網路/防火牆/帳號/SSL | 開放埠、修正帳號、關閉 SSL 或配置 CA |
| SQL_Running=No | SHOW SLAVE STATUS\G Last_SQL_Error | 主鍵衝突/結構差異/外鍵失敗 | 手動修正資料、跳過錯誤 SET GLOBAL sql_slave_skip_counter=1(謹慎) |
| 延遲大 | Seconds_Behind_Master; SHOW PROCESSLIST | 長事務/大查詢/硬體瓶頸/單線程重放 | 開啟多線程複制 slave_parallel_workers=4、優化慢查詢、升級從庫 |
| GTID 斷裂 | SHOW MASTER STATUS; SHOW SLAVE STATUS\G | 主庫跳過事務/手動刪除 binlog | 重新同步或用 mysqlbinlog 補充 |