首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL Cluster SQL Node 與獨立 MySQL Server 搭建主從複製:錯誤診斷與修復實戰

     編輯:MySQL 綜合教學

前言:混合架構下的複製挑戰

MySQL Cluster (NDB) 的 SQL Node 作為主庫,向獨立 MySQL Server (InnoDB/MyISAM) 做從庫的異構複製架構,涉及 binlog 格式、權限、網路連通性等多層面配置。本文記錄搭建過程中遇到的 Last_IO_Error: error connecting to master 錯誤診斷全過程。

一、架構拓撲與版本資訊

角色IP節點類型MySQL 版本
MGM 管理節點192.168.55.11nodeid=1Cluster 7.2.8
Data + SQL Node192.168.55.10nodeid=2,4MySQL 5.5.27 / NDB 7.2.8
Data + SQL Node192.168.55.9nodeid=3,5MySQL 5.5.27 / NDB 7.2.8
獨立從庫192.168.55.133標準 MySQLMySQL 5.5.27

二、主庫配置 (192.168.55.10 - SQL Node nodeid=4)

[mysqld]
server-id = 1
log-bin = mysql-bin
binlog_format = ROW              # NDB 必須使用 ROW 格式
binlog-do-db = db_name1
binlog-do-db = db_name2
binlog-ignore-db = db_name3
ndb_nodeid = 4                   # Cluster 節點 ID

三、從庫配置 (192.168.55.133)

[mysqld]
server-id = 3
log-bin = mysql-bin
binlog_format = ROW
binlog-do-db = db_name1
binlog-do-db = db_name2
binlog-ignore-db = db_name3

四、複製建立流程與錯誤現場

1. 主庫建立複製帳號

# 在 192.168.55.9 (SQL Node nodeid=5) 執行
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slavemysql'@'192.168.211.133' IDENTIFIED BY '908';
mysql> FLUSH PRIVILEGES;

# 查看主庫狀態
mysql> SHOW MASTER STATUS;
+------------------+----------+------------------+------------------+
| File             | Position | Binlog_Do_DB     | Binlog_Ignore_DB |
+------------------+----------+------------------+------------------+
| mysql-bin.000003 |      112 | db_name1,db_name2| db_name3         |
+------------------+----------+------------------+------------------+

2. 從庫配置主從關係

# 在 192.168.55.133 執行
mysql> CHANGE MASTER TO 
    MASTER_HOST='192.168.55.9',
    MASTER_USER='slaveuser',
    MASTER_PASSWORD='000',
    MASTER_LOG_FILE='mysql-bin.000003',
    MASTER_LOG_POS=112;

mysql> START SLAVE;

3. 錯誤現象

mysql> SHOW SLAVE STATUS\G;
Last_IO_Error: error connecting to master 'slaveuser@192.168.55.9:3306' - retry-time: 60 retries: 86400

4. 關鍵排查:網路連通性正常

# 從庫可直接連線主庫
[root@slave]# mysql -h 192.168.55.9 -u slavemysql -p
Enter password: 
Welcome to the MySQL monitor...
mysql> 

網路通、帳號密碼對、權限已授予,但複製線程連不上。

五、根因分析與修復

核心問題:CHANGE MASTER TO 參數與實際授權不匹配

仔細對比發現兩個關鍵不一致:

項目主庫授權從庫 CHANGE MASTER問題
用戶名slavemysqlslaveuser❌ 不一致
密碼908000❌ 不一致
允許主機192.168.211.133無指定(從庫IP)⚠️ 需匹配從庫實際IP

修正步驟

# 1. 在主庫 (192.168.55.9) 重新授權,匹配從庫實際 IP
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slaveuser'@'192.168.55.133' IDENTIFIED BY '000';
mysql> FLUSH PRIVILEGES;

# 2. 在從庫重新配置
mysql> STOP SLAVE;
mysql> CHANGE MASTER TO 
    MASTER_HOST='192.168.55.9',
    MASTER_USER='slaveuser',
    MASTER_PASSWORD='000',
    MASTER_LOG_FILE='mysql-bin.000003',
    MASTER_LOG_POS=112;
mysql> START SLAVE;

# 3. 驗證
mysql> SHOW SLAVE STATUS\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0

六、Cluster 環境特有注意事項

  1. binlog_format=ROW 強制:NDB 引擎不支援 STATEMENT 格式,MIXED 也會回退到 ROW
  2. ndb_log_bin:確保 SQL Node 開啟 ndb_log_bin=1 (預設開啟)
  3. --ndb-nodeid 啟動參數:多 SQL Node 時必須指定節點 ID 避免衝突
  4. 複制過濾:binlog-do-db / replicate-do-db 需在主從雙端一致配置
  5. 衝突檢測:若雙向複制需啟用 ndb_slave_conflict_role 等衝突解決機制

七、診斷檢查清單(下次直奔主題)

# 1. 網路連通性
telnet master_ip 3306

# 2. 帳號權限驗證
mysql -h master_ip -u repl_user -p

# 3. 主庫授權檢查
SELECT user, host FROM mysql.user WHERE user='repl_user';
SHOW GRANTS FOR 'repl_user'@'slave_ip';

# 4. 從庫配置核對
SHOW SLAVE STATUS\G;
# 重點檢查:Master_Host, Master_User, Master_Port, Master_Log_File, Read_Master_Log_Pos

# 5. 防火牆/SELinux
iptables -L -n | grep 3306
getenforce

總結

此次故障純屬配置參數不一致導致:主庫授權用戶 slavemysql/908,從庫配置 slaveuser/000。複製建立時必須嚴格核對用戶名、密碼、允許主機三要素。Cluster 環境下額外注意 ROW 格式強制與節點 ID 配置。建議建立標準化複製部署腳本,避免手動輸入錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved