環境
- 雙節點:FreeBSD 5.4,Apache 2.0.55,PHP 4.4.0,MySQL 4.1.15。
- Master: 192.168.0.1,Slave: 192.168.0.2。
- 單向同步:Master 寫入,Slave 主動拉取。
- 同步庫:
abc,用戶:root(演示用,生產建議專用賬號)。
配置文件部署
cp /usr/local/mysql/share/mysql/my-medium.cnf /usr/local/mysql/var/my.cnf
Master 配置 /usr/local/mysql/var/my.cnf
[mysqld]
server-id = 1
log-bin
binlog-do-db = abc
重啟:
/usr/local/mysql/bin/mysqladmin shutdown && /usr/local/mysql/bin/mysqld_safe --user=mysql &
Slave 配置 /usr/local/mysql/var/my.cnf
[mysqld]
server-id = 2
master-host = 192.168.0.1
master-user = root
master-password = ''
master-port = 3306
master-connect-retry = 10
replicate-do-db = abc
log-slave-updates
重啟同 Master。
驗證步驟
- 檢查 Slave 錯誤日誌
/usr/local/mysql/var/主機名.err,確認:
Slave I/O thread: connected to master 'root@192.168.0.1:3306', replication started
- Master 執行:
SHOW MASTER STATUS; 記錄 Binlog 位置。
- Master 執行:
SHOW PROCESSLIST; 看到 Binlog Dump 線程服務 Slave。
- Slave 執行:
SHOW SLAVE STATUS; 關注 Slave_IO_Running=Yes、Slave_SQL_Running=Yes、Seconds_Behind_Master=0。
- Slave 執行:
SHOW PROCESSLIST; 看到 Slave_IO、Slave_SQL 線程。
- Master 庫
abc 建表插入數據,Slave 查詢驗證同步成功。
進階擴展方向
- 雙主熱備 (Master-Master):雙向復制,需
auto_increment_offset/increment 避免主鍵衝突。
- 一主多從:多 Slave 指向同一 Master,分擔讀壓力。
- GTID 復制 (MySQL 5.6+):簡化故障切換與拓撲變更。
- 半同步復制:主庫至少一從庫收到 Binlog 才提交,減少數據丟失風險。
避坑提醒
server-id 全局唯一,非 0。
- Master 必須開啟
log-bin。
- Slave
replicate-do-db 需與 Master binlog-do-db 一致。
- 防火牆放行 3306,MySQL 權限允許 Slave IP 連接。
- 不要手動修改
master.info/relay-log.info,用 CHANGE MASTER TO。