| 角色 | IP | 版本 | Server ID |
|---|---|---|---|
| Master | 192.168.1.100 | MySQL 5.7+ | 1 |
| Slave | 192.168.1.101 | MySQL 5.7+ | 2 |
原則:從庫版本 ≥ 主庫版本;同一局域網、低延遲。
my.cnf[mysqld]
server-id=1
log-bin=mysql-bin
binlog-format=ROW # 推薦 ROW,避免 UUID() 等不安全函數問題
gtid-mode=ON # 5.6+ 開啟 GTID
enforce-gtid-consistency=ON
sync-binlog=1 # 高可用關鍵
binlog-do-db=business_db # 僅同步業務庫
binlog-ignore-db=mysql,sys,performance_schema,information_schema
CREATE USER 'repl_user'@'192.168.1.%' IDENTIFIED BY 'ReplPass@123';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'192.168.1.%';
FLUSH PRIVILEGES;
systemctl restart mysqld
mysqldump --single-transaction --master-data=2 --databases business_db > /backup/master_base_$(date +%F).sql
--master-data=2 會在輸出中以註釋形式包含 CHANGE MASTER TO 所需的 MASTER_LOG_FILE 與 MASTER_LOG_POS(或 GTID)。
SHOW MASTER STATUS;
-- 記下 File 與 Position
my.cnf[mysqld]
server-id=2
relay-log=relay-bin
log-slave-updates=ON # 鏈式複制時必需
read-only=ON # 防誤寫
gtid-mode=ON
enforce-gtid-consistency=ON
mysql -uroot -p < /backup/master_base_2024-05-20.sql
STOP SLAVE;
CHANGE MASTER TO
MASTER_HOST='192.168.1.100',
MASTER_PORT=3306,
MASTER_USER='repl_user',
MASTER_PASSWORD='ReplPass@123',
MASTER_AUTO_POSITION=1; # GTID 核心參數,無需手動指定 File/Position
START SLAVE;
非 GTID 降級寫法:
CHANGE MASTER TO
MASTER_HOST='192.168.1.100',
MASTER_USER='repl_user',
MASTER_PASSWORD='ReplPass@123',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=154;
SHOW SLAVE STATUS\G
-- 關鍵指標
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
Last_IO_Error:
Last_SQL_Error:
Retrieved_Gtid_Set: xxxx
Executed_Gtid_Set: xxxx
bind-address。SHOW SLAVE STATUS\G 看 Last_SQL_Error,常見於主鍵衝突、字符集不一致、表結構差異。SET GLOBAL gtid_purged='...' 謹慎操作,或重新從 Master 重做基線。slave_parallel_workers(5.7+ 開啟並行複制)、網絡帶寬。binlog_checksum=CRC32、master_verify_checksum=ON、slave_sql_verify_checksum=ON。replicate-ignore-db 過濾系統庫。mysqld_exporter 采集 Seconds_Behind_Master、Slave_IO_Running 告警。