[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-format = ROW
gtid_mode = ON
enforce_gtid_consistency = ON
[mysqld]
server-id = 2
relay_log = mysql-relay-bin
log-slave-updates = 1
read_only = 1
gtid_mode = ON
enforce_gtid_consistency = ON
# CHANGE MASTER TO ... (動態配置,不寫死 my.cnf)
-- Master
SHOW MASTER STATUS;
-- Slave
SHOW SLAVE STATUS\G
-- 關鍵指標:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

| 線程 | 位置 | 職責 | 關鍵文件 |
|---|---|---|---|
| Binlog Dump (IO) | Master | 讀取 Binlog 發送給 Slave IO 線程 | mysql-bin.xxxxxx |
| IO Thread | Slave | 接收 Binlog 事件 → 寫入 Relay Log → 更新 master.info | Relay Log, master.info |
| SQL Thread | Slave | 讀取 Relay Log → 解析為 SQL → 執行 → 更新 relay-log.info | Relay Log, relay-log.info |
行號 內容
1 行數
2 Master_Log_File
3 Read_Master_Log_Pos
4 Master_Host
5 Master_User
6 Password (加密)
7 Master_Port
8 Connect_Retry
9-14 SSL 相關參數
作用:Slave 重啟後知曉從哪個 Binlog 位置繼續拉取。
1 Relay_Log_File
2 Relay_Log_Pos
3 Relay_Master_Log_File
4 Exec_Master_Log_Pos
作用:記錄 SQL 線程執行進度,用於崩潰恢復定位。
mysqlbinlog 解析host_name-relay-bin.nnnnnnFLUSH LOGS 可手動輪轉master.info → 若存在,完全忽略 my.cnf/命令行參數CHANGE MASTER TO⚠️ 大坑:修改 my.cnf 的 master-host/master-user 等參數後重啟不生效,因為 master.info 優先級最高!
STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = N; -- N=1 普通語句, N=2 涉及 AUTO_INCREMENT
START SLAVE;
log-bin 使用[mysqld]
slave-skip-errors = 1062,1032 -- 指定錯誤碼
# 或(極度不推薦)
slave-skip-errors = all
警告:會導致主從數據不一致且難以發現,僅限極端場景臨時使用。
FLUSH TABLES WITH READ LOCK;SHOW MASTER STATUS 位點tar czf /backup/mysql.tar.gz /var/lib/mysqlUNLOCK TABLES;CHANGE MASTER TO MASTER_LOG_FILE=..., MASTER_LOG_POS=... → START SLAVEmysqldump --master-data=2 --single-transaction --all-databases > dump.sql
# 導入 Slave 後自動包含 CHANGE MASTER TO 信息
master-connect-retry)master.inforelay-log.infoLOAD DATA INFILE:SQL_LOAD-* 臨時文件恢復時:
有 Relay Log → 直接啟動
無 Relay Log 但有 relay-log.info → 用 CHANGE MASTER TO MASTER_LOG_FILE=..., MASTER_LOG_POS=... 定位
理解三線程模型與四大文件機制,是排查 90% 復制疑難雜癥的鑰匙。