MySQL 複製是高可用、讀寫分離、災備的基石。本文基於 MySQL 3.23.25 版本(現代版本原理相同),詳細記錄雙節點主從搭建、帳號建立、二進制日誌啟用、快照初始化、狀態切換等核心步驟。
| 角色 | IP | 說明 |
|---|---|---|
| Master (A) | 192.168.0.1 | 寫入主庫,開啟 binlog |
| Slave (B) | 192.168.0.2 | 只讀從庫,拉取 binlog 重放 |
建議: 主從版本保持一致,優先使用最新 GA 版本。
從庫需以此帳號連線主庫讀取 binlog:
GRANT FILE ON *.* TO 'replicate'@'192.168.0.2' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
僅授予 FILE 權限,遵循最小權限原則。
編輯 my.cnf [mysqld] 區段新增:
log-bin
重啟後主庫將在資料目錄生成 hostname-bin.000001 等 binlog 文件。
mysqladmin shutdownibdata*、.frm、.MYD、.MYI 等)完整複製/打包。mysqld_safe &此快照將作為從庫初始資料基準。
datadir)。my.cnf,設定 server-id=2(主庫為 1),並可選啟用 log-bin 以利鏈式複製。在從庫執行:
CHANGE MASTER TO
MASTER_HOST='192.168.0.1',
MASTER_USER='replicate',
MASTER_PASSWORD='password',
MASTER_PORT=3306,
MASTER_LOG_FILE='hostname-bin.000001', -- 主庫當前 binlog 文件
MASTER_LOG_POS=4; -- 起始位置(通常為 4)
隨後啟動複製線程:
START SLAVE;
SHOW SLAVE STATUS\G
關鍵指標:
Slave_IO_Running: Yes — I/O 線程正常連線主庫Slave_SQL_Running: Yes — SQL 線程正常重放Seconds_Behind_Master: 0 — 無延遲FLUSH TABLES WITH READ LOCK;SHOW SLAVE STATUS 顯示 Seconds_Behind_Master=0。STOP SLAVE; RESET MASTER;(清空自身 binlog),修改 server-id、應用寫入權限。CHANGE MASTER TO ... 指向新主庫,START SLAVE;。UNLOCK TABLES;生產環境建議使用 MHA、Orchestrator、GTID 自動化故障轉移。
server-id 必須全域唯一,否則複製報錯。binlog_format 建議 ROW 或 MIXED,減少不一致風險。bind-address 不可為 127.0.0.1。