環境規劃
| 角色 | IP | MySQL 版本 | 安裝路徑 |
| Master | 192.168.0.205 | 4.1 | /opt/mysql |
| Slave | 192.168.0.206 | 4.1 | /opt/mysql |
1. Master 配置 /etc/my.cnf
[mysqld]
server-id = 1
log-bin = binlog_name
# 可選:binlog-do-db, binlog-ignore-db
2. 建立複寫帳號(在 Master)
GRANT REPLICATION SLAVE, RELOAD, SUPER ON *.*
TO 'slave'@'192.168.0.206' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
3. 連線測試(從 Slave 向 Master)
/opt/mysql/bin/mysql -u slave -p -h 192.168.0.205
-- 應成功連線並看到 Master 資料庫列表
4. Slave 配置 /etc/my.cnf
[mysqld]
server-id = 2
master-host = 192.168.0.205
master-user = slave
master-password = 123456
master-port = 3306
# 可選:replicate-do-db, replicate-ignore-db
5. 初始資料同步三選一
- LOAD DATA FROM MASTER(MySQL 4.1 支援,簡單但鎖表久):
/opt/mysql/bin/mysql -u root -p
mysql> LOAD DATA FROM MASTER;
- mysqldump --master-data=1(推薦,單交易一致性):
# Master
/opt/mysql/bin/mysqldump --master-data=1 --single-transaction --all-databases > /backup/full.sql
scp /backup/full.sql 192.168.0.206:/backup/
# Slave
/opt/mysql/bin/mysql -u root -p < /backup/full.sql
- 物理複製 datadir(最快,需停 Master 寫入):
# Master: FLUSH TABLES WITH READ LOCK; 記下 SHOW MASTER STATUS;
# 複製 /opt/mysql/var/* 到 Slave 同路徑
# Master: UNLOCK TABLES;
6. 啟動 Slave 同步
/opt/mysql/share/mysql/mysql.server start
/opt/mysql/bin/mysql -u root -p
mysql> SHOW SLAVE STATUS\G
-- 確認:
-- Slave_IO_Running: Yes
-- Slave_SQL_Running: Yes
-- Seconds_Behind_Master: 0
7. 驗證同步
-- Master
CREATE DATABASE sampdb;
USE sampdb;
CREATE TABLE new (name CHAR(20), phone CHAR(20));
INSERT INTO new VALUES ('abc', '0532555555');
-- Slave
SHOW DATABASES; -- 應見 sampdb
USE sampdb;
SHOW TABLES; -- 應見 new
SELECT * FROM new; -- 應見剛插入資料
關鍵管理指令
| 指令 | 用途 |
SLAVE STOP;停止複寫執行緒 |
SLAVE START;啟動複寫執行緒 |
SHOW SLAVE STATUS\G詳細狀態、錯誤、延遲 |
PURGE MASTER LOGS TO 'binlog.000004';清理 Master 過期 Binlog(謹慎!Slave 未處理前不可清) |
CHANGE MASTER TO ...動態修改複寫參數(需 SLAVE STOP 後執行) |
避坑指南
server-id 必須唯一,Master/Slave 不能相同。
- Slave 修改配置後需刪除
data/master.info 重啟才生效(舊版機制)。
- 防火牆
iptables 需開放 3306 雙向。
- MySQL 4.1 為舊版(EOL),生產環境強烈建議升級至 5.7/8.0,獲得 GTID、半同步、平行複寫、安全修補。