關鍵限制:Slave 回放是單線程串行的(5.6 前),Master 並行寫入在 Slave 端順序執行,易成瓶頸。
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.*
TO 'repl'@'192.168.0.%' IDENTIFIED BY 'pass';
[mysqld]
log-bin=mysql-bin
server-id=10
[mysqld]
server-id=2
relay-log=mysql-relay-bin
log-slave-updates=1
read-only=1
CHANGE MASTER TO
MASTER_HOST='master_ip',
MASTER_USER='repl',
MASTER_PASSWORD='pass',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=4;
START SLAVE;
SHOW SLAVE STATUS\G
關鍵指標:Slave_IO_Running: Yes、Slave_SQL_Running: Yes、Seconds_Behind_Master: 0。
# Master
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS; -- 記錄 File & Position
mysqldump --all-databases --lock-all-tables > dump.sql
UNLOCK TABLES;
# Slave
mysql < dump.sql
CHANGE MASTER TO MASTER_LOG_FILE='...', MASTER_LOG_POS=...;
START SLAVE;
停服務 → 複製數據目錄 → 啟動 Master → Slave 掛載數據 → 配置同步點。
| 模式 | Binlog 格式 | 優點 | 缺點 |
|---|---|---|---|
| Statement (SBR) | SQL 語句 | 日誌小、易閱讀、壓縮好 | 非確定性函數(NOW、UUID)導致不一致 |
| Row (RBR) | 行級變更 | 絕對一致、無函數問題 | 日誌大、不可讀、大批量更新開銷大 |
| Mixed | 自動切換 | 兼顧兩者 | 需 5.1+,動態 SET binlog_format=ROW |
mysql-bin.index:Binlog 文件索引master.info:Slave 記錄 Master 連接信息、讀取位點(勿刪除)relay-log.info:SQL 線程回放位點讀寫分離,Slave 可掛不同索引/引擎承擔不同查詢。Slave 過多時 Master 吐 Binlog 帶寬成瓶頸。
互為主從,auto_increment_offset/auto_increment_increment 避免 ID 衝突。風險:邏輯衝突(同行異操作)無自動解決,MySQL 原生不支持多主寫入衝突檢測。
一主寫入,一主只讀做熱備,故障切換秒級。推薦生產環境。
Slave 開啟 log-slave-updates 成為下一級 Master,減輕頂層 Master 壓力。
binlog-do-db、binlog-ignore-db(慎用,影響恢復)replicate-do-db、replicate-wild-do-table(推薦,靈活安全)