MySQL 支持單向、異步復制。Master 寫入 Binlog,Slave 通過 I/O 線程拉取 Binlog 寫入 Relay Log,SQL 線程重放 Relay Log 實現數據同步。三線程協作:
/etc/my.cnf)[mysqld] server_id = 1 # 全局唯一 log-bin = /data/mysql/3306/binlog/binlog binlog_format = ROW # 推薦行級,數據一致性最強 expire_logs_days = 7 # 自動清理舊日志 max_binlog_size = 512M
重啟:systemctl restart mysqld
/etc/my.cnf)[mysqld] server_id = 2 # 與 Master 不同 log-bin = /data/mysql/3306/binlog/binlog # 建議開啟,便於級聯/切主 relay_log = /data/mysql/3306/relaylog/relay read_only = 1 # 防止誤寫入 skip_slave_start = 1 # 手動控制啟動
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'slave_ip' IDENTIFIED BY 'strong_password'; FLUSH PRIVILEGES;
SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | binlog.000001 | 4826 | | | +------------------+----------+--------------+------------------+
STOP SLAVE; CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='repl_user', MASTER_PASSWORD='strong_password', MASTER_LOG_FILE='binlog.000001', MASTER_LOG_POS=4826; START SLAVE;
SHOW SLAVE STATUS\G 關鍵指標: Slave_IO_Running: Yes Slave_SQL_Running: Yes Seconds_Behind_Master: 0
| 操作 | 命令 |
|---|---|
| 查看 Binlog 內容 | mysqlbinlog binlog.000001 |
| 重置 Binlog | RESET MASTER |
| 查看 Master 狀態 | SHOW MASTER STATUS |
| 刷新日志 | FLUSH LOGS |
| 啟動/停止 Slave | START/STOP SLAVE |
| 基於 Binlog 時間點恢復 | mysqlbinlog binlog.000001 | mysql -p(未執行 RESET MASTER 前有效) |
server_id 必須全局唯一,否則報錯mysqldump --master-data=2 導出導入後再 CHANGE MASTER TO 指定位點Seconds_Behind_Master、Slave_IO_Running、Slave_SQL_Running 三大核心指標