MySQL 5.1+ 支援 NDB Cluster 節點作為 Replication Master/Slave,結合集群高可用 + 異地備份。但效能較單純 Cluster 或 Replication 略低,需權衡。
binlog_format = ROW 或 MIXED(Statement 會報錯)my.cnf)[mysqld]
server-id = 1
binlog_format = ROW
log-bin = mysql-bin
ndbcluster # 啟用 NDB 引擎
my.cnf)[mysqld]
server-id = 2
relay-log = slave-relay-bin
relay-log-purge = 1
skip-slave-start
replicate-ignore-db = mysql -- 忽略系統庫
ndbcluster
-- Master 上
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'slave_sql_node_ip' IDENTIFIED BY 'strong_pass';
-- Slave 上
CHANGE MASTER TO
MASTER_HOST='master_sql_node_ip',
MASTER_USER='repl',
MASTER_PASSWORD='strong_pass',
MASTER_PORT=3306;
START SLAVE;
SHOW SLAVE STATUS\G
-- 關鍵欄位:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
-- 啟動前:僅 2 個進程 (ndbcluster event daemon + client)
-- 啟動後:新增 2 個進程
-- system user - Slave I/O thread (接收 binlog)
-- system user - Slave SQL thread (重放 event)
replicate-ignore-db=mysql 防權限表衝突ndb-slave-conflict-role、ndb-log-conflict| 指標 | 正常值 | 異常處理 |
|---|---|---|
| Seconds_Behind_Master | 0~低個位數 | >30s 檢查網路/ SQL thread 阻塞 |
| Slave_IO_Running | Yes | No → 檢查網路、認證、Master Binlog |
| Slave_SQL_Running | Yes | No → SHOW ENGINE NDB STATUS、衝突處理 |
| Relay_Log_Space | 穩定 | 持續增長 → SQL thread 慢於 I/O thread |
Cluster Replication 以 Row-based Binlog + NDB 原生同步 實現跨集群資料同步。配置關鍵在 binlog_format=ROW、server-id 唯一、replicate-ignore-db=mysql。生產部署前必須在測試環境跑通故障切換、衝突解決、延遲爆增三大壓測場景。