Mysql

如何解決錯誤“查詢時出現錯誤’Got error 0’No error’ from NDBCLUSTER’”?

  • April 16, 2018

我目前正在使用 MySQL 5.1 DB 的大型網路(使用 MyISAM 表),並且正在評估遷移到 MySQL Cluster。我想讓 MySQL 集群從現有的 5.1 主機之一複制,以確保它可以處理我們想要發送的負載,並使用真實數據負載測試故障條件等。

到目前為止,我已經為 MySQL Cluster mysqld 載入了所有的 MyISAM 表,並且我已經將它連接到了複製主機。複製工作正常(5.1 MyISAM -> 5.5 MyISAM)。但是,一旦我將其中一個表轉換為 ENGINE=NDBCLUSTER ,我就會收到以下錯誤:

121027 16:09:40 [ERROR] Slave SQL: Error 'Got error 0 'No error' from NDBCLUSTER' on query. Default database: 'accounts'. Query: 'UPDATE heartbeat SET ts = NOW() WHERE id = 1', Error_code: 1296
121027 16:09:40 [Warning] Slave: Got error 0 'No error' from NDB Error_code: 1296
121027 16:09:40 [Warning] Slave: Got error 0 'No error' from NDBCLUSTER Error_code: 1296
121027 16:09:40 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mysql-bin.027069' position 11283558

“心跳”只是我們擁有的一些表,每秒更新一次。我可以在連接到集群的 API 節點(讀取 bin 日誌的同一節點)時手動執行查詢。似乎只有在從執行緒上執行查詢時才會發生故障。

此外,查詢本身成功——心跳表使用 NOW() 的複制值更新。

我在 64 位 Linux 主機上執行 5.5.27 ndb 7.2.8。我有 4 個數據節點、一個管理節點和一個 API 節點(目前)。5.5.22 ndb 7.2.6 也發生了同樣的錯誤——我已經升級以查看是否可以解決問題,但沒有運氣。

我已經研究了 mysqld-debug 跟踪日誌和 gdb。據我所知,寫入 ndb_apply_status 表時出現問題,但我無法準確指出問題所在(我也不確定我是否在正確的軌道上)。

這個問題也在MySQL 論壇上進行了跟踪

啊哈。這似乎是您嘗試從使用語句二進制日誌的伺服器複製時遇到的錯誤。我最初忽略了不支持這種情況。

我可以通過添加一個中間 mysqld 來解決這個問題,它只是將語句複製二進制日誌轉換為混合複製二進制日誌(使用 log-slave-updates 和 binlog-format=MIXED)。

希望這對將來的某人有所幫助。

引用自:https://dba.stackexchange.com/questions/27741