主從復制是 MySQL 高可用、讀寫分離、備份分流的基石。本文以 Ubuntu 環境為例,提供從安裝、配置、建立同步賬號、導出快照、啟動同步、狀態驗證的標準化全流程,適用于 MySQL 5.6/5.7/8.0(GTID 模式另文說明)。
| 角色 | IP | Server ID | 備註 |
|---|---|---|---|
| Master | 192.168.0.75 | 1 | 寫入節點 |
| Slave | 192.168.0.76 | 2 | 讀取/備份節點 |
[mysqld] bind-address = 192.168.0.75 # 綁定內網 IP,或 0.0.0.0 server-id = 1 # 全局唯一 log_bin = /var/log/mysql/mysql-bin.log binlog_do_db = zm_gaiay_net_cn # 指定同步庫(可多行,或用 replicate-do-db 在從庫過濾) binlog_format = ROW # 推薦 ROW 格式,數據一致性最強 expire_logs_days = 7 # 自動清理舊 binlog max_binlog_size = 100M
systemctl restart mysqlCREATE USER 'repl_user'@'192.168.0.%' IDENTIFIED BY 'ReplPass#2024'; GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'192.168.0.%'; FLUSH PRIVILEGES;
mysql -u root -p USE zm_gaiay_net_cn; FLUSH TABLES WITH READ LOCK; -- 阻塞寫入 SHOW MASTER STATUS; -- 記錄 File、Position -- 另開終端導出 mysqldump -u root -p --single-transaction --master-data=2 --databases zm_gaiay_net_cn > master_snapshot.sql -- 回主庫解鎖 UNLOCK TABLES;
[mysqld] server-id = 2 relay-log = /var/log/mysql/mysql-relay-bin.log log_bin = /var/log/mysql/mysql-bin.log binlog_do_db = zm_gaiay_net_cn read_only = 1 # 防止誤寫入 skip_slave_start = 1 # 防止啟動自動同步,便于手動控制
systemctl restart mysqlmysql -u root -p < master_snapshot.sql
CHANGE MASTER TO MASTER_HOST='192.168.0.75', MASTER_USER='repl_user', MASTER_PASSWORD='ReplPass#2024', MASTER_LOG_FILE='mysql-bin.000001', -- 來自 Master SHOW MASTER STATUS MASTER_LOG_POS=107; 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_LOG_POS 錯誤 | 檢查防火牆、ping、重新 CHANGE MASTER TO |
| SQL_Running: No | 從庫執行報錯(鍵衝突/表結構差異/外鍵失敗) | 查 Last_SQL_Error,手動修復或跳過:STOP SLAVE; SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE; |
| Seconds_Behind_Master 大 | 從庫硬件弱/大事務/長查詢阻塞/單線程 SQL 執行 | 升級硬件、啟用多線程復制 (slave_parallel_workers>0)、優化慢查詢 |
| Relay log 損壞 | 磁盤故障/殺進程導致寫入中斷 | RESET SLAVE ALL; 重新 CHANGE MASTER TO 從新位點開始 |
gtid_mode=ON, enforce_gtid_consistency=ON,故障切換自動定位位點。rpl_semi_sync_master=ON, rpl_semi_sync_slave=ON,承諾至少一從庫收到事務才提交。mysql_slave_io_running、mysql_slave_sql_running、mysql_seconds_behind_master。pt-table-checksum 檢測主從數據一致性。xtrabackup --slave-info 記錄同步位點,恢復無需重新搭建。標準化部署、持續監控、定期校驗,主從復制才能成為可信賴的基礎設施。