記錄一次基於 FreeBSD 5.4、MySQL 4.1.15 的雙機單向同步部署實戰,涵蓋安裝佈局、配置文件佈放、主庫啟用 binlog、從庫動態配置、啟動驗證全流程,適合老版本環境維護參考或理解同步核心邏輯。
| 角色 | 主機名 | IP | MySQL 安裝路徑 | 數據目錄 |
|---|---|---|---|---|
| Master | db1 | 192.168.0.1 | /usr/local/MySQL | /usr/local/MySQL/var |
| Slave | db2 | 192.168.0.2 | /usr/local/MySQL | /usr/local/MySQL/var |
同步策略:**單向**,Master 為寫入源,Slave 主動拉取同步。同步庫:abc。同步用戶:root(測試環境,生產嚴禁)。
MySQL 4.1 默認配置文件在 /usr/local/MySQL/share/MySQL/,提供 my-small.cnf、my-medium.cnf、my-large.cnf。測試環境選用 my-medium.cnf:
cp /usr/local/MySQL/share/MySQL/my-medium.cnf /usr/local/MySQL/var/my.cnf
雙機均執行上述操作。
vi /usr/local/MySQL/var/my.cnf
在 [mysqld] 區塊添加/修改:
server-id = 1
log-bin
binlog-do-db = abc
說明: log-bin 無參數則用主機名作前綴;sql-bin-update-same 為舊版參數,新版已廢棄。
/usr/local/MySQL/bin/mysqladmin shutdown
/usr/local/MySQL/bin/mysqld_safe --user=mysql &
vi /usr/local/MySQL/var/my.cnf
在 [mysqld] 區塊添加:
server-id = 2
master-host = 192.168.0.1
master-user = root
master-password = your_root_password
master-port = 3306
master-connect-retry = 60
replicate-do-db = abc
關鍵差異: Slave 用 master-host 等參數聲明主庫連接信息(舊版靜態配置方式),新版 5.1+ 推薦 CHANGE MASTER TO 動態配置。
FLUSH TABLES WITH READ LOCK;。abc 庫數據(mysqldump --master-data=2 abc > abc.sql 或打包 datadir)。SHOW MASTER STATUS; 記錄 File、Position。UNLOCK TABLES;。abc 庫。啟動 Slave MySQL 服務(建議加 --skip-slave-start 參數防自動啟動):
mysql> STOP SLAVE;
mysql> CHANGE MASTER TO
MASTER_HOST = '192.168.0.1',
MASTER_USER = 'root',
MASTER_PASSWORD = 'your_root_password',
MASTER_LOG_FILE = 'mysql-bin.000001', -- Master SHOW MASTER STATUS 的 File
MASTER_LOG_POS = 98; -- Master SHOW MASTER STATUS 的 Position
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G
核心指標:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
-- Master 執行
USE abc;
CREATE TABLE test_sync (id INT PRIMARY KEY, val VARCHAR(20));
INSERT INTO test_sync VALUES (1, 'from_master');
-- Slave 查詢
USE abc;
SELECT * FROM test_sync;
若 Slave 能查到數據,同步生效。
| 舊版 (4.1/5.0/5.1) | 新版 (5.6/5.7/8.0) | 遷移建議 |
|---|---|---|
master-host 等靜態參數 | CHANGE MASTER TO 動態配置 | 配置文件移除靜態參數,改用 SQL 動態配置 |
| 單線程 SQL 重放 | 多線程 Slave (MTS) slave_parallel_workers | 開啟 MTS 提升重放並發 |
| 基於文件位置同步 | GTID (Global Transaction ID) 同步 | 啟用 GTID 簡化切主、故障恢復 |
| 無半同步 | 半同步複制 rpl_semi_sync_master | 關鍵業務開啟半同步保證零數據丟失 |
| 字符集 latin1 常見 | 默認 utf8mb4 | 統一字符集避免亂碼 |
雖環境版本較老,但 MySQL 主從同步核心邏輯**二十年未變**:Master 開 binlog → Slave 拉取 binlog → 重放 Relay Log。掌握 server-id、log-bin、CHANGE MASTER TO、SHOW SLAVE STATUS 四大核心,即可在任何版本環境落地同步架構。