| 角色 | IP | MySQL 版本 | Server ID |
|---|---|---|---|
| Master | 192.168.0.1 | 5.1.34 | 1 |
| Slave | 192.168.0.2 | 5.1.34 | 2 |
/etc/my.cnf[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-do-db = test # 需同步的庫,多行可寫多個
binlog-ignore-db = mysql # 不同步的庫
log-slave-updates # 級聯復制必開
slave-skip-errors = 1062,1032 # 跳過主鍵衝突等(慎用)
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.0.2' IDENTIFIED BY '111111';
FLUSH PRIVILEGES;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
-- 記錄 File: mysql-bin.000001, Position: 106
-- 另開終端打包數據目錄
cd /usr/local/mysql
tar zcvf var.tar.gz var
scp 192.168.0.1:/usr/local/mysql/var.tar.gz .
tar zxvf var.tar.gz
chown -R mysql:mysql var
/etc/my.cnf[mysqld]
server-id = 2
log-bin = mysql-bin
master-host = 192.168.0.1
master-user = slave
master-password = 111111
master-port = 3306
replicate-do-db = test
replicate-ignore-db = mysql
master-connect-retry = 60
log-slave-updates
slave-skip-errors = 1062,1032
# 測試連接
mysql -h192.168.0.1 -uslave -p111111
# 配置同步座標
SLAVE STOP;
CHANGE MASTER TO
MASTER_HOST='192.168.0.1',
MASTER_USER='slave',
MASTER_PASSWORD='111111',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=106;
SLAVE START;
SHOW SLAVE STATUS\G;
成功標誌: Slave_IO_Running: Yes 且 Slave_SQL_Running: Yes
UNLOCK TABLES;
| 現象 | 可能原因 | 修復步驟 |
|---|---|---|
| IO_Running:Yes SQL_Running:No | Slave 寫入導致數據衝突 / 重啟事務回滾 | Master 取最新 SHOW MASTER STATUS → Slave CHANGE MASTER TO 新位置 → START SLAVE |
| IO_Running:No Seconds_Behind_Master:NULL | Master 端故障 / Binlog 損壞 | service mysql restart Master → 重新同步座標 → 重啟 Slave |
| 連接被拒絕 | 防火牆 / bind-address / 用戶宿主不匹配 | 檢查 3306 端口、bind-address=0.0.0.0、GRANT ...@'IP' |
binlog-do/ignore-db 由「當前默認庫」決定,易誤判;Slave 端 replicate-do/ignore-* 更安全但傳輸量大標準化部署腳本 + 固定檢查清單(網絡、權限、Server ID、Binlog 位置、防火牆、bind-address)= 可靠主從。文檔記錄每次變更的 Binlog 位置,災難恢復時可精準定位。