架構規劃
| 角色 | IP | Server ID | 說明 |
| Master | 192.168.0.205 | 1 | 寫入節點,開啟 binlog |
| Slave | 192.168.0.206 | 2 | 讀取節點,啟用 relay log |
版本:MySQL 5.7+ / 8.0(推薦 GTID 模式)
Master 配置
# /etc/my.cnf.d/replication.cnf
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-format=ROW
gtid-mode=ON
enforce-gtid-consistency=ON
log-slave-updates=ON
# 安全:僅監聽內網
bind-address=192.168.0.205
重啟:
systemctl restart mysqld
創建複製賬戶
CREATE USER 'repl'@'192.168.0.206' IDENTIFIED BY 'StrongReplPass!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.206';
FLUSH PRIVILEGES;
Slave 配置
# /etc/my.cnf.d/replication.cnf
[mysqld]
server-id=2
relay-log=mysql-relay
log-slave-updates=ON
gtid-mode=ON
enforce-gtid-consistency=ON
read-only=ON
bind-address=192.168.0.206
重啟:
systemctl restart mysqld
建立複製鏈路
方式一:GTID 自動定位(推薦 5.7+)
CHANGE MASTER TO
MASTER_HOST='192.168.0.205',
MASTER_USER='repl',
MASTER_PASSWORD='StrongReplPass!',
MASTER_AUTO_POSITION=1;
START SLAVE;
方式二:傳統文件/位置定位(兼容舊版)
- Master 鎖表導出基準點:
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS; 記錄 File、Position
mysqldump --single-transaction --all-databases --master-data=2 > base.sql
UNLOCK TABLES;
- Slave 導入:
mysql < base.sql
- 配置同步點:
CHANGE MASTER TO MASTER_HOST='192.168.0.205', MASTER_USER='repl', MASTER_PASSWORD='StrongReplPass!', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=157;
START SLAVE;
驗證與監控
SHOW SLAVE STATUS\G
-- 關鍵指標:
-- Slave_IO_Running: Yes
-- Slave_SQL_Running: Yes
-- Seconds_Behind_Master: 0
-- Last_IO_Error / Last_SQL_Error: 空
常見故障處理
| 現象 | 排查 | 修復 |
| IO_Running=No | 網絡不通、賬戶密碼錯、Master binlog 丟失 | 檢查防火牆、重建賬戶、Master 補全 binlog 或重新基準同步 |
| SQL_Running=No | 主鍵衝突、外鍵失敗、字符集不匹配、DDL 不兼容 | SHOW SLAVE STATUS 看 Last_SQL_Error,SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1 跳過單事務(謹慎),或重新同步 |
| Seconds_Behind_Master 偏大 | Slave 硬件弱、大事務、長查詢阻塞、網絡延遲 | 優化 Slave 索引、並行複製 slave_parallel_workers=4、升級硬件 |
| GTID 集合斷裂 | Master 切換、binlog 清理、手工注入事務 | 重新建立 GTID 基準同步 |
運維最佳實踐
- 監控告警:Prometheus
mysqld_exporter 采集 mysql_slave_status_* 指標,Seconds_Behind_Master > 30 告警
- 備份策略:Slave 停 SQL 線程
STOP SLAVE SQL_THREAD → mysqldump --single-transaction --master-data=2 → START SLAVE SQL_THREAD,不影響 Master
- 延遲從庫:部署 1 條
MASTER_DELAY=3600 的延遲從庫,防誤刪/誤更新數據快速恢復
- 定期演練:季度切主從、模擬故障恢復、驗證備份可用性
升級到雙主/多主
- 雙主:雙向配置
CHANGE MASTER TO,auto_increment_increment=2、auto_increment_offset=1/2 避免主鍵衝突
- 生產建議:引入 **MHA / Orchestrator / ProxySQL** 實現自動故障轉移、讀寫分離、查詢路由