CHANGE MASTER TO 為主)/etc/my.cnf-- 在 A 執行
GRANT REPLICATION SLAVE ON *.* TO 'backup'@'10.10.10.53' IDENTIFIED BY '1234';
CREATE DATABASE backup;
-- 在 B 執行
GRANT REPLICATION SLAVE ON *.* TO 'backup'@'10.10.10.22' IDENTIFIED BY '1234';
CREATE DATABASE backup;
注意:舊版用 GRANT FILE 不安全,現代版本請用 REPLICATION SLAVE。
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-do-db=backup
# 可選:binlog-ignore-db=mysql,test
重啟 MySQL,執行 SHOW MASTER STATUS; 記下 File、Position。
[mysqld]
server-id=2
master-host=10.10.10.22
master-user=backup
master-password=1234
master-port=3306
master-connect-retry=60
replicate-do-db=backup
# 可選:replicate-ignore-db=mysql,test
重啟 MySQL。MySQL 會在資料目錄產生 master.info 記錄連線資訊。
-- 在 B 執行
SHOW SLAVE STATUS\G
-- 關鍵:Slave_IO_Running=Yes, Slave_SQL_Running=Yes, Seconds_Behind_Master=0
在單向主從基礎上,讓 B 也啟用 Binlog 並成為 A 的 Slave。
[mysqld]
server-id=1/2 (各自唯一)
log-bin=mysql-bin
log-slave-updates=1 # 關鍵:將從 Master 接收的變更寫入自己的 Binlog
auto-increment-increment=2 # 避免自增 ID 衝突
auto-increment-offset=1/2 -- A=1, B=2
binlog-do-db=backup
replicate-do-db=backup
-- A 上執行 (指向 B)
CHANGE MASTER TO MASTER_HOST='10.10.10.53', MASTER_USER='backup', MASTER_PASSWORD='1234', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107;
START SLAVE;
-- B 上執行 (指向 A)
CHANGE MASTER TO MASTER_HOST='10.10.10.22', MASTER_USER='backup', MASTER_PASSWORD='1234', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107;
START SLAVE;
| 參數 | 作用 | 建議 |
|---|---|---|
| server-id | 叢集內唯一識別,範圍 1~2^32-1 | 規劃編號體系,避免衝突 |
| log-bin | 啟用二進位日誌,複寫基礎 | 指定檔名前綴,如 mysql-bin |
| binlog-do-db | 只記錄指定資料庫的變更 | 減少 Binlog 體積,但需注意跨庫查詢不會被記錄 |
| replicate-do-db | Slave 只重放指定資料庫 | 與 binlog-do-db 配合使用 |
| log-slave-updates | Slave 將重放的變更寫入自己的 Binlog | 鏈式複寫、雙主架構必開 |
| auto-increment-increment/offset | 雙主/多主避免自增 ID 衝突 | N 台主機設 increment=N, offset=1..N |
| master-connect-retry | 連線失敗重試間隔 (秒) | 預設 60,網路不穩可調大 |
my.ini (通常在 C:\Windows\ 或 MySQL 安裝目錄),winmysqladmin.exe 會將 C:\my.cnf 改名為 mycnf.bak 並建立 C:\Windows\my.ini。net start mysql / net stop mysql 或服務管理員。log-bin=C:/mysqlbak/mysqlbin 使用正斜線或雙反斜線。STOP SLAVE; RESET SLAVE ALL; -- 刪除 master.info、relay-log.info 再重新 CHANGE MASTER TO。Seconds_Behind_Master、Slave_IO_Running、Slave_SQL_Running、Relay_Log_Space。pt-table-checksum (Percona Toolkit)。STOP SLAVE SQL_THREAD) 進行邏輯/物理備份,不影響 Master。