| 模式 | 原理 | 優點 | 缺點 |
|---|---|---|---|
| Statement-Based (SBR) | 記錄 SQL 語句 | Binlog 小、易讀、跨版本兼容 | 非確定性函數導致主從不一致;需行鎖 |
| Row-Based (RBR) | 記錄行變更前後像 | 最安全、支援複制過濾、並行複制效率高 | Binlog 大、無法直接看到 SQL |
| Mixed | 預設 SBR,遇不安全切 RBR | 折中 | 行為難預測 |
生產強烈建議:binlog_format = ROW。
關鍵限制:從庫重放單線程串行 (5.6 前);5.7+ slave_parallel_workers + LOGICAL_CLOCK 並行。
[mysqld]
server_id = 100
log_bin = mysql-bin
binlog_format = ROW
gtid_mode = ON
enforce_gtid_consistency = ON
expire_logs_days = 7
max_binlog_size = 100M
sync_binlog = 1 # 最安全,效能敏感可設 100-1000
binlog_row_image = FULL # 或 MINIMAL 省空間
[mysqld]
server_id = 200
relay_log = mysql-relay-bin
log_slave_updates = 1 # 從庫做其他從庫的主必開
read_only = 1 # 防誤寫入
slave_parallel_workers = 8
slave_parallel_type = LOGICAL_CLOCK
master_info_repository = TABLE
relay_log_info_repository = TABLE
gtid_mode = ON
enforce_gtid_consistency = ON
CREATE USER 'repl'@'%' IDENTIFIED BY 'StrongReplPass123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
systemctl stop mysqld
rsync -av /var/lib/mysql/ slave:/var/lib/mysql/
systemctl start mysqld
# 主庫
xtrabackup --backup --target-dir=/backup/full --user=root --password
xtrabackup --prepare --target-dir=/backup/full
rsync -av /backup/full/ slave:/var/lib/mysql/
# 從庫啟動後自動從 xtrabackup_binlog_info 獲取位置
mysqldump -uroot -p --single-transaction --master-data=2 --all-databases | \
mysql -h slave_ip -uroot -p
-- 從庫執行
CHANGE MASTER TO
MASTER_HOST='master_ip',
MASTER_USER='repl',
MASTER_PASSWORD='StrongReplPass123!',
MASTER_AUTO_POSITION=1; -- GTID 自動定位
START SLAVE;
SHOW SLAVE STATUS\G
-- 確認 Slave_IO_Running=Yes, Slave_SQL_Running=Yes, Seconds_Behind_Master=0
| 指標 | 健康閾值 | 異常處理 |
|---|---|---|
| Seconds_Behind_Master | < 1-5 秒 | 大事務、DDL、並行度不足、I/O 瓶頸 |
| Slave_IO_Running / Slave_SQL_Running | Yes / Yes | No → 查 Last_IO_Error / Last_SQL_Error |
| Relay_Log_Space | 穩定 | 持續增長 → SQL 線程追不上 |
| Exec_Master_Log_Pos vs Read_Master_Log_Pos | 接近 | 差距大 → 積壓 |
pt-table-checksum 校驗 → pt-table-sync 修復;啟用 binlog_format=ROW 杜絕語句級不一致。slave_pending_jobs_size_max 控制隊列。sync_binlog=1、雲盤/RAID、定期備份 Binlog 異地。SET GTID_NEXT='aaa-bbb-ccc:5'; BEGIN; COMMIT; SET GTID_NEXT=AUTOMATIC; 填補/跳過。「ROW 格式 + GTID + 並行複制 + 監控校驗 + 自動化切換」 是現代 MySQL 高可用複制的標準配置。
掌握複制原理、配置最佳實踐、故障處理流程,構建可靠、可擴展、可運維的 MySQL 複制集群。