MySQL 複制基於二進制日志:主庫記錄數據變更 → 從庫 I/O 線程拉取 → 寫入 Relay Log → SQL 線程重放。支持單向、雙向、級聯多種拓撲。
[mysqld] server-id = 1 # 唯一,1~2^32-1 log-bin = mysql-bin # 啟用二進制日志 binlog-format = ROW # 推薦 ROW 格式,數據一致性最強 binlog-do-db = business_db # 僅記錄指定庫 (可選) binlog-ignore-db = mysql,test,sys # 忽略系統庫 (可選) expire_logs_days = 7 # 自動清理舊日志 max_binlog_size = 1G # 單文件上限 sync_binlog = 1 # 每次提交刷盤,最安全 innodb_flush_log_at_trx_commit = 1 # 配合 sync_binlog 保證不丟數據
-- MySQL 5.7+ CREATE USER 'repl_user'@'%' IDENTIFIED BY 'StrongReplPass#2024'; GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%'; FLUSH PRIVILEGES; -- 5.6 及之前 (無 REPLICATION SLAVE 權限) GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%' IDENTIFIED BY 'pass';
[mysqld] server-id = 2 # 唯一,不可與主庫重複 relay-log = relay-bin # Relay Log 文件名 relay-log-index = relay-bin.index read-only = 1 # 防止誤寫入 (超級用戶除外) skip-slave-start = 1 # 啟動不自動啟動複製,手動控制 # 以下參數 5.6+ 建議用 CHANGE MASTER TO 設置,而非寫死配置文件 # master-host, master-port, master-user, master-password, master-connect-retry
FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS; -- 記錄 File (如 mysql-bin.000003) 和 Position (如 154) # 另開終端備份:tar czf /backup/db.tar.gz /var/lib/mysql/business_db UNLOCK TABLES;
# 從庫解壓數據到 datadir tar xzf /backup/db.tar.gz -C /var/lib/mysql/ chown -R mysql:mysql /var/lib/mysql/business_db
CHANGE MASTER TO MASTER_HOST='192.168.1.100', MASTER_PORT=3306, MASTER_USER='repl_user', MASTER_PASSWORD='StrongReplPass#2024', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=154, MASTER_CONNECT_RETRY=60; START SLAVE;
SHOW SLAVE STATUS\G # 關鍵指標: Slave_IO_Running: Yes Slave_SQL_Running: Yes Seconds_Behind_Master: 0 Last_IO_Error: (空) Last_SQL_Error: (空)
FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS; 記錄新 File/Position。STOP SLAVE;UNLOCK TABLES; PURGE BINARY LOGS TO 'mysql-bin.000010';CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000010', MASTER_LOG_POS=456; START SLAVE;| 指標 | 正常值 | 異常處理 |
|---|---|---|
Seconds_Behind_Master | 0 或極小 | > 300 秒告警,檢查慢 SQL、網絡、從庫負載 |
Slave_IO_Running | Yes | No → 檢查網絡、賬號、主庫日志是否被清理 |
Slave_SQL_Running | Yes | No → Last_SQL_Error 分析,可能需跳過錯誤事務 |
Relay_Log_Space | 穩定 | 持續增長說明 SQL 線程跟不上 |
# 主庫額外配置 gtid_mode = ON enforce_gtid_consistency = ON log_slave_updates = 1 # 從庫 CHANGE MASTER TO 使用 CHANGE MASTER TO MASTER_AUTO_POSITION = 1; -- 無需指定文件/位置
GTID 實現自動定位、故障轉移簡單、多源複製支持。