2023.11.01

MySQL

MySQL NDB Cluster 8.2.0 Innovationリリース(リリース日:2023年10月25日)

バグ修正

  • NDBレプリケーション: 文字タイプのプライマリキーの更新は、NDBバイナリログインジェクターに送信されるBEFOREおよびAFTERトリガーの値で正しく示されませんでした。この問題は以前に部分的に修正されましたが、次にリストされる値を持つバイナリロギングオプションを使用してmysqldを実行すると依然として問題が発生することがその後判明しました:
    • --ndb-log-update-minimal=ON
    • --ndb-log-update-as-write=OFF

    minimalバイナリログ形式では、更新された行を反映するAFTER値から全てのプライマリキー列が除外されました。この根拠は、更新トリガーを受信した時にプライマリキーが一定のままであるという誤った仮定です。これは、プライマリキーが文字データタイプを使用する場合に、使用される照合順序の比較規則によって等しいものとして扱われる値に文字の列が更新されると、更新トリガーが受信されるという事実を考慮していませんでした。
    このような変更を複製できるようにするためには、変更をAFTER値に含める必要があります。この修正により、それは確実に行われます。 (バグ #34540016)
    参考: バグ #27522732、バグ #34312769、バグ #34388068。

  • NDB Cluster API: ヘッダーファイル ndb_version.hおよびmgmapi.hは、Cのみを必要とするはずであるにもかかわらず、コンパイルにC++を必要としました。 (バグ #35709497)
  • NDB Cluster API: MGM API関数 ndb_mgm_get_status()、ndb_mgm_get_status2()、ndb_mgm_get_status3()は、認証失敗エラーで不正なノードステータスを誤って返しました。 (バグ #35687497)
  • NDB Cluster API: Ndb::pollEvents2()は、クラスターの障害を示す NDB_FAILURE_GCI (~(Uint64)0)を設定しませんでした。 (バグ #35671818)
    参考: バグ #31926584。この問題は、バグ #18753887のリグレッションです。
  • NDBクライアントプログラム: ndb_select_allがテーブルから全てのデータを読み取ることができなかった場合、常に再読み取りを試行していました。これにより、以下の2つの問題が発生する可能性がありました:
    • 空ではない部分的な結果を返すと、最終的には重複行の誤ったレポートが生成されました。
    • テーブルヘッダーは再試行の度に出力されました。

    現在は、ndb_select_allが全てのテーブルデータの読み取りに失敗した場合、その動作は以下のようになります:

    • 結果が空でない場合、ndb_select_allはエラーで停止します(そして、テーブルのスキャンは再試行されません)。
    • 結果が空の場合、ndb_select_allは古いヘッダーを再利用してスキャンを再試行します。

    (バグ #35510814)

  • NDB ClusterはClang 15を使用してコンパイルされませんでした。(バグ #35763112)
  • src/common/transporter/Transporter.cppのDBUG_ENTERに、一致するDBUG_RETURNがありませんでした。 (バグ #35717730)
  • TransporterRegistry(TR)インスタンスが管理サーバーに接続する時、最初にMGM APIを使用し、それから、その後の通信のために接続をTransporter接続に変換します。最初の接続のタイムアウトが長すぎる(60秒)ため、クラスタに2つの管理サーバーがあり、そのうちの1つが使用不能の場合、クライアントは、利用可能な管理サーバーに接続できるようになる前、この使用不能な管理サーバーがタイムアウトになるまで待機する必要がありました。
    この問題は、MGM API接続タイムアウトを5000ミリ秒に設定することによって修正されます。これは、TRが動的ポートの取得と設定に使用するタイムアウトと等しいです。 (バグ #35714466)
  • 競合解決例外テーブルで使用される競合の原因の値の位置がずれており、ROW_ALREADY_EXISTSとROW_DOES_NOT_EXISTの順序が逆になっていました。 (バグ #35708719)
  • TLSがTCP トランスポーター上で使用される場合、基礎となるSSL_write()がSSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEを返した場合、 ssl_writev()メソッドはTLS_BUSY_TRY_AGAINを返すことがあります。これは、後で書き込みを再試行する必要があることを上位層に示すために使用されます。
    TCP_Transporter::doSend()は、バッファされたデータの複数のブロックが一連のwritev()呼び出しを使用して書き込まれるループで書き込む可能性があるため、SSL_ERROR_WANT_WRITEが発生する前にバッファされたデータの一部が正常に書き込まれている可能性があります。このような場合、TLS_BUSY_TRY_AGAINの処理は、送信された内容をバッファリング層に通知するために最初にiovec_data_sent(sum_sent)を呼び出すことなく、単にループから戻るだけでした。
    この結果、後で、既に送信されたチャンクの再送信が試行され、重複したデータと不正な長さの引数の両方を指定してwritev()が呼び出されました。その結果、チェックサムエラーとSSL writev()が失敗し、不正な長さのエラーがログに報告されました。
    この問題は、単に送信ループから戻るのではなく、ループから抜け出すことによって修正され、実行はそのようなステータス更新が行われるコード内のポイントまでフォールスルーされます。 (バグ #35693207)
  • src/mgmclient/main.cppで見つかったメモリリークを削除しました。 (バグ #35641639)
  • ブロックが以前にDUMP 9992を使用して設定されていなかったデータノードから信号ブロックを解放しようとしてDUMP 9993が使用されると、データノードが予期せずシャットダウンしました。 (バグ #35619947)
  • 不正なリクエストに対するNDBFSデバッグ出力が改善されました。 (バグ #35500304)
    参考: この問題は、バグ #28922609のリグレッションです。
  • 他のイベントによってNDBFSのリクエストがログにダンプされると、リクエストタイプの名前の一部がUnknownアクションとして出力されました。 (バグ #35499931)
  • ndb_restoreは、バックアップ中に変更された等しいものとして比較するプライマリキー値を更新しませんでした。 (バグ #35420131)
  • NOWAITを使用したバックアップは、データノードの再起動後に開始されませんでした。 (バグ #35389533)
  • 分散グローバルチェックポイント(GCP)プロトコルの進行が停止した場合、これはGCPモニターによって検出され、オプションで、TimeBetweenEpochsTimeoutおよび TimeBetweenGlobalCheckpointsTimeoutデータノードパラメータによって決定される処理を使用して処理されます。
    LCPプロトコルはほとんどノードローカルですが、ローカルチェックポイント(LCP)の終わりでGCPプロトコルの進行状況に依存します。これは、GCPプロトコルが停止すると、LCPもこの状態で停止する可能性があることを意味します。LCPウォッチドッグはLCPがこの最終状態で停止していることを検出した場合、GCPモニターはディストリビューションを認識しているため、この状況の処理をGCPモニターに委ねる必要があります。
    GCPモニター制限が設定されていない場合(TimeBetweenEpochsTimeoutが0に等しい)、GCPストールの処理はGCPモニターによって実行されません。この場合、LCPウォッチドッグは依然としてアクションを実行しており、最終的にはクラスター障害につながる可能性がありました。この修正により、この不正な動作が修正され、LCPウォッチドッグはそのようなアクションを実行しなくなります。 (バグ #29885899)
  • 以前は、トランザクションのコミットおよび完了中にタイムアウトが検出されると、トランザクションコーディネーター(TC)がシリアルコミット完了実行プロトコルに切り替わりました。これにより、大規模なトランザクションのコミット完了処理が遅くなり、GCP_COMMITの遅延とエポックサイズに影響を及ぼしました。このような場合に切り替える代わりに、TCは並行コミットの完了を待ち続け、状態とノードが関係するトランザクションの概要を定期的にログに記録します。 (バグ #22602898)
    参考: バグ #35260944。

全ての変更点やバグ修正については、以下のページをご覧ください。
MySQL NDB Cluster 8.2.0 リリースノート(MySQLウェブサイト):
https://dev.mysql.com/doc/relnotes/mysql-cluster/8.2/en/news-8-2-0.html


MySQL Editions

MySQL Editions
MySQLのサブスクリプションは、24時間365日体制でお客様をサポートいたします。さらに MySQL Enterprise Edition では、データベース管理者支援ツール MySQL Enterprise Monitor やバックアップツール MySQL Enterprise Backup をご利用いただけます。