現在、MySQL 5.1 DBの大規模ネットワーク(MyISAMテーブルを使用)で作業しており、MySQL Clusterへの移行を評価しています。 MySQL Clusterを既存の5.1ホストの1つから複製して、送信したい負荷を処理できることを確認し、実際のデータ負荷などで障害状態をテストしたいと思います。
これまでのところ、MySQL Cluster mysqldにすべてのMyISAMテーブルがロードされ、レプリケーションマスターに接続されています。レプリケーションは正常に機能しています(5.1 MyISAM-> 5.5 MyISAM)。ただし、テーブルの1つを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
「ハートビート」は、1秒に1回更新されるテーブルの一部です。クラスターのAPIノード(binログを読み取っているのと同じノード)に接続しているときに、手動でクエリを実行できます。このエラーは、クエリがスレーブスレッドで実行された場合にのみ発生するようです。
また、クエリ自体succeeds-ハートビートテーブルは、NOW()の複製された値で更新されます。
64ビットLinuxホストで5.5.27 ndb 7.2.8を実行しています。 4つのデータノード、1つの管理ノード、および1つのAPIノード(現時点では)があります。これと同じエラーが5.5.22 ndb 7.2.6でも発生しました-問題が解決するかどうかを確認するためにアップグレードしましたが、うまくいきません。
Mysqld-debugトレースログとgdbを試してみました。 ndb_apply_statusテーブルへの書き込みに問題があることはわかるが、問題が何であるかを正確に特定することはできない(また、正しい方向に進んでいると確信していない)。
この問題も MySQLフォーラムで追跡されています です。
ああ。これは、ステートメントビンログを使用するサーバーから複製しようとすると発生するエラーのようです。私は最初、このシナリオがサポートされていないことを見過ごしていました。
ステートメントのレプリケーションbinlogを混合レプリケーションbinlogに変換するだけの中間mysqldを追加することで、これを回避できました(log-slave-updatesとbinlog-format = MIXEDを使用)。
これが将来の誰かを助けることを願っています。