主從複寫是 MySQL 高可用、讀寫分離、備份卸載的基石。本文以同機多實例(3406=Master、3506=Slave)為例,詳述複寫四階段原理、配置檔差異、帳號建立、同步啟動、驗證全流程。
Binlog Dump 線程推送給 Slave。Seconds_Behind_Master=0 表示追上。my3406.cnf[mysqld]
server-id=3406
log_bin=/data/inst3406/log/bin/inst3406bin
innodb_flush_log_at_trx_commit=1
sync_binlog=1
# 確保事務不丟失、Binlog 即時落盤
my3506.cnf[mysqld]
server-id=3506
relay_log=/data/inst3506/log/relay/relay-bin
read_only=1
# 防止誤寫入,強制只讀
# Master 上
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'192.168.1.177' IDENTIFIED BY 'repl';
FLUSH PRIVILEGES;
RESET MASTER; -- 重置 Binlog(僅測試環境用)
# Slave 上
CHANGE MASTER TO
MASTER_HOST='192.168.1.177',
MASTER_USER='repl',
MASTER_PASSWORD='repl',
MASTER_PORT=3406,
MASTER_LOG_FILE='inst3406bin.000001',
MASTER_LOG_POS=0;
START SLAVE;
SHOW SLAVE STATUS\G
-- 關鍵指標
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
Master_Log_File: inst3406bin.000001
Read_Master_Log_Pos: 120
Exec_Master_Log_Pos: 120
# Master 建庫建表寫入
CREATE DATABASE tempdb;
USE tempdb;
CREATE TABLE tb_engines AS SELECT * FROM information_schema.engines;
# Slave 查詢
SELECT COUNT(*) FROM tempdb.tb_engines; -- 返回 9,同步成功
| 現象 | 排查方向 |
|---|---|
| IO_Running=No | 網路不通、帳號密碼錯、MASTER_LOG_FILE/POS 錯、防火牆攔截 3306/3406 |
| SQL_Running=No | Relay Log 損壞、Schema 不一致、主鍵衝突、觸發器/存儲過程報錯 → SHOW SLAVE STATUS\G 看 Last_SQL_Error |
| Seconds_Behind_Master 偏大 | Slave 機器性能弱、大事務回放慢、網路延遲、slave_parallel_workers 開啟並行回放 |
| GTID 模式報錯 | 確認 gtid_mode=ON、enforce_gtid_consistency=ON、MASTER_AUTO_POSITION=1 |
rpl_semi_sync_master=ON,Master 等待至少 1 Slave 收到 Binlog 再提交,強化數據安全。MASTER_DELAY=3600,防誤刪誤更新的「後悔藥」。掌握此標準化流程,可快速在生產環境部署穩定的 MySQL 主從架構。