首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL Replication 搭建速查手冊:主從配置、GTID 模式、故障排查命令全集

     編輯:MySQL 綜合教學

極速搭建清單 (GTID 模式,MySQL 5.6+ 推薦)

1. Master 配置 (`/etc/my.cnf`)


[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-format = ROW
gtid_mode = ON
enforce-gtid-consistency = ON
sync_binlog = 1
innodb_flush_log_at_trx_commit = 1
# binlog-do-db = biz_db       # 可選:只同步指定庫
# binlog-ignore-db = mysql,sys,performance_schema,information_schema

重啟:`systemctl restart mysqld`

2. 創建復制賬號


CREATE USER 'repl'@'192.168.100.%' IDENTIFIED BY 'StrongReplPass!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.100.%';
FLUSH PRIVILEGES;

3. 獲取 Master 同步坐標 (非 GTID 模式必需,GTID 模式可跳過)


FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
-- 記錄 File (如 mysql-bin.000001) 和 Position (如 890)
UNLOCK TABLES;

4. Slave 配置 (`/etc/my.cnf`)


[mysqld]
server-id = 2                    # 唯一,≠ Master
relay-log = relay-bin            # 獨立 Relay Log 名稱
log-slave-updates = ON           # 關鍵:支撐級聯/雙主
gtid_mode = ON
enforce-gtid-consistency = ON
# replicate-do-db = biz_db       # 從庫過濾 (可選)
# replicate-ignore-db = mysql,sys,...

重啟:`systemctl restart mysqld`

5. 建立復制鏈接


-- GTID 模式 (推薦,無需 File/Position)
CHANGE MASTER TO
  MASTER_HOST='192.168.100.10',
  MASTER_USER='repl',
  MASTER_PASSWORD='StrongReplPass!',
  MASTER_PORT=3306,
  MASTER_AUTO_POSITION=1;

-- 非 GTID 模式 (舊版兼容)
CHANGE MASTER TO
  MASTER_HOST='192.168.100.10',
  MASTER_USER='repl',
  MASTER_PASSWORD='StrongReplPass!',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=890;

6. 啟動並驗證


START SLAVE;
SHOW SLAVE STATUS\G
-- 核心確認:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0

核心狀態解讀與故障排查速查

現象關鍵字段定位方向修復命令/動作
I/O 線程未運行`Slave_IO_Running: No`
`Slave_IO_State: Connecting...`
網絡不通/防火牆/權限/賬號/主庫 bind-address`START SLAVE IO_THREAD` / 修正網絡權限 / `CHANGE MASTER TO` 重定位
SQL 線程未運行`Slave_SQL_Running: No`
`Last_SQL_Error: ...`
主鍵衝突/Schema 不同/字符集/長度截斷/外鍵1. 修正數據 → `START SLAVE SQL_THREAD`
2. 跳過錯誤 (非 GTID):`SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE SQL_THREAD;`
3. GTID 模式跳過:`SET GTID_NEXT='aaa-bbb-ccc:10'; BEGIN; COMMIT; SET GTID_NEXT=AUTOMATIC;`
延遲高`Seconds_Behind_Master: 大`
`Slave_IO_State: Waiting...`
Slave 資源不足/長事務/單線程回放/主庫寫入過快啟用並行復制:`slave_parallel_workers=8`, `slave_parallel_type=LOGICAL_CLOCK` / 優化慢 SQL / 升級硬件
Relay Log 積壓`Relay_Log_Space` 大SQL 線程慢於 I/O 線程設置 `relay_log_space_limit=10G` / 並行復制 / 監控告警

Master/Slave 核心管理命令大全

角色命令用途
Master`SHOW MASTER STATUS`當前 Binlog 文件/位置/GTID
`SHOW SLAVE HOSTS`已連接 Slave 列表 (需 `report-host/port`)
`SHOW BINLOG EVENTS [IN 'file' FROM pos LIMIT n]`解析 Binlog 事件內容
`PURGE BINARY LOGS TO 'file'`刪除指定文件**之前**的 Binlog (確認 Slave 已回放)
`PURGE BINARY LOGS BEFORE 'date'`按時間刪除舊 Binlog
`RESET MASTER`重置 Binlog 索引/文件 (僅全新初始化用,**慎用**)
`SET SQL_LOG_BIN=0/1`當前會話禁用/啟用 Binlog 寫入 (需 `SUPER`)
`FLUSH LOGS`切換新 Binlog 文件 (觸發 `FLUSH LOGS` 事件)
Slave`START SLAVE [IO_THREAD|SQL_THREAD]`啟動復制 (可單獨啟動某線程)
`STOP SLAVE [IO_THREAD|SQL_THREAD]`停止復制
`CHANGE MASTER TO ...`動態修改 Master 連接信息/位置/GTID 模式
`RESET SLAVE [ALL]`重置 Slave 狀態 (清除 master.info/relay-log.info/GTID 執行集合)
`SET GLOBAL SQL_SLAVE_SKIP_COUNTER=n`跳過 n 個錯誤事件 (**非 GTID 模式**)
`SHOW SLAVE STATUS\G`完整狀態診斷 (核心指標見上表)
`SHOW RELAYLOG EVENTS [IN 'file' FROM pos LIMIT n]`解析 Relay Log 事件 (定位 SQL 線程錯誤位置)
`PURGE MASTER LOGS ...`從庫刪除已同步的 Master Binlog (謹慎)
`LOAD DATA FROM MASTER`從 Master 熱備份同步 (舊版/特定引擎,不推薦)

並行復制啟用 (5.6+ 顯著降低延遲)


-- Slave 端動態生效 (需 STOP SLAVE 後設置)
STOP SLAVE;
SET GLOBAL slave_parallel_workers = 8;        -- 工作線程數 (CPU 核心數參考)
SET GLOBAL slave_parallel_type = 'LOGICAL_CLOCK'; -- 並行策略:基於組提交順序 (推薦)
-- DATABASE: 按庫並行 (庫少效果差)
START SLAVE;

結語

MySQL Replication 搭建核心在於:**GTID 模式簡化定位、雙邊 `server-id` 唯一、`log-slave-updates` 支撐拓撲擴展、並行復制消除延遲**。掌握 `CHANGE MASTER TO`、`SHOW SLAVE STATUS` 關鍵字段語義、IO/SQL 線程分離排查、GTID/非 GTID 跳過錯誤差異,即可應對 90%+ 生產復制故障。建議將此手冊作為運維 SOP 存檔,定期演練故障注入與恢復流程。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved