2024.05.10

MySQL

MySQL NDB Cluster 8.4.0 LTSリリース(リリース日:2024年4月30日)

非推奨と削除関連

  • パッケージ; Linux: 非推奨のツール /usr/bin/pathfix.pyをFedora 39のパッケージから削除しました。 (バグ #35997178)
  • MySQL 8.0.22で非推奨となった未使用のINFORMATION_SCHEMA.TABLESPACESテーブルが削除されました。
    情報スキーマのFILESテーブルは、NDBテーブルのテーブルスペース関連の情報を提供します。 (WL #14065)

追加または変更された機能

  • パッケージ: Fedora 40およびUbuntu 24.04のサポートを追加しました。
  • NDBレプリケーション: 以前は、バイナリログを実行するSQLノードがlog_replica_updates=OFFに設定されていた場合でも、レプリカNDBクラスターに適用されたレプリケートされる更新は、バイナリログを実行するSQLノードに送信されました。このような更新は、ネットワークトラフィックとリソースの消費を減らすために、ロギングをトリガーしない更新と同様に送信されなくなりました。 (WL #15407)
  • ndbinfo情報データベース: transporter_detailsテーブルをndbinfo情報データベースに追加しました。このテーブルはトランスポーターテーブルに似ていますが、全体としてではなく個々のトランスポーターに関する情報を提供します。
    (バグ #113163、バグ #36031560)
  • NDBクライアントプログラム: 出力の冗長レベルを制御するために、--verboseオプションをndb_waiterテストプログラムに追加しました。 (バグ #34547034)
  • 開始時間と完了時間、パージを開始したインジェクターであるかどうかなど、バイナリログのパージに関連するロギングが改善されました。 (バグ #36176983)

バグ修正

  • NDBレプリケーション: NDBテーブルのレプリケーションは、次の状況で停止しました:
    • テーブルには明示的なプライマリキーがない
    • テーブルにBIT列が含まれていた
    • 更新または削除される行を見つけるためにハッシュスキャンが使用された

    この問題を解決するために、テーブルのハッシュキーがソースとレプリカで一致することを確認するようになりました。 (バグ #34199339)

  • NDBクラスターAPI: 接続にTLSが指定されていない場合でも、TLS接続エラーが出力されました。
    この問題を修正するために、TLSエラーが無視された後、管理ハンドルのエラー条件を明示的にNO_ERRORにリセットしました。 (バグ #36354973)
  • NDBクラスターAPI: NdbEventOperationメソッドのhasError()およびclearError()は、長い間非推奨でしたが、実質的に無効になりました: hasError()は定数0を返し、clearError()は何も実行しなくなりました。イベントタイプを決定するためには、代わりにgetEventType2()を使用します。
  • NDBクライアントプログラム: 場合によっては、ndb_sign_keysを使用して生成された証明書をロードできないことがありました。 (バグ #36430004)
  • NDBクライアントプログラム: 次のコマンドラインオプションは、ndb_redo_log_readerユーティリティプログラムでは正しく機能しませんでした:
    • --mbyte
    • --page
    • --pageindex

    (バグ #36313427)

  • NDBクライアントプログラム: ndb_sign_keysによって生成される証明書の有効期間は、固定日数と、結果を符号付き整数値にキャストするOpenSSL関数 RAND_bytes()によって提供されるランダムな追加時間で構成されます。この値は負の値になる場合があったため、追加時間が加算されるのではなく減算されることになりました。
    RAND_bytes()から取得した値を保持するために符号なし整数型を使用することで、この問題を解決します。 (バグ #36270629)
  • NDBクライアントプログラム: --bind-addressオプションを指定してndb_mgmdを呼び出すと、場合によってはプログラムが予期せず終了することがありました。 (バグ #36263410)
  • NDBクライアントプログラム: ndb_show_tablesなどの一部のNDBユーティリティは、データノードでTLSが必要であり有効な証明書が必要な場合に、API接続からメモリをリークしました。 (バグ #36170703)
  • NDBクライアントプログラム: NDBプログラムの出力から不要なテキスト NDBT_ProgramExit ...を削除するためにNDB 8.0.18および8.0.20で開始された作業は、このリリースで完了しました。このメッセージは、そのようなプログラムのリリースバイナリには表示されなくなります。 (バグ #36169823)
    参照: バグ #27096741も参照してください。
  • NDBクライアントプログラム: ndb_waiter --ndb-tls-search-pathからの出力が正しくフォーマットされませんでした。 (バグ #36132430)
  • NDBクライアントプログラム: Windowsホストでは、ndb_sign_keysはsshプログラムを見つけることができませんでした。 (バグ #36053948)
  • NDBクライアントプログラム: Windowsでは、ndb_sign_keysが--CA-toolオプションを正しく処理しませんでした。 (バグ #36053908)
  • NDBクライアントプログラム: ファイル CommandInterpreter.cppのclang形式に80文字という厳密な制限を使用すると、NDB管理クライアントの対話型ヘルプ テキストの書式設定が崩れました。 (バグ #36034395)
  • NDBクライアントプログラム: --bind-address=localhostを指定してndb_mgmdを起動しようとすると、Illegal bind addressというエラーが発生して失敗しました。このエラーは、バインドアドレスを解析してホスト部分とポート部分に分割しようとした時に MGM APIから返されました。このような場合、localhostが有効なアドレスとして受け入れられるようになりました。 (バグ #36005903)
  • 進行中のトランザクションでテーブルの検出を拒否した時に生成された暗黙的なロールバックによって、トランザクション全体がロールバックされました。これは、トランザクションがアクティブな間にテーブル定義が変更された場合に発生する可能性がありました。また、このような時には、テーブルが既にデータディクショナリに存在するかどうかも確認しました。これは、同じトランザクション内の同じテーブルからの後続の読み取りによって(誤って)検出が許可されてしまうことも意味していました。
    現在、このような場合、特定のテーブルがデータディクショナリに既に存在するかどうかの確認をスキップします; 代わりに、トランザクションの進行中に変更されたテーブルの検出を常に拒否し、ユーザーにエラーを返すようになりました。 (バグ #36191370)
  • --disable-indexesおよび--restore-privilege-tablesを指定したndb_restoreを使用してバックアップが復元されると、プライマリキーの順序付きインデックスがmysql.ndb_sql_metadataテーブルで失われ、--rebuild-indexesを使用しても再構築できませんでした。 (バグ #36157626)
  • SSL対応のNdbSocketからのSSL_pending()データが適切にチェックされませんでした。 (バグ #36076879)
  • 場合によっては、ndbmtdに停止信号を送信しようとすると、ndb_mgmdがハングすることがありました。 (バグ #36066725)
  • NDBの準備がまだ整っていないか、まだ開始されていない時に、変更を適用するためにレプリカを開始すると、役に立たないエラーメッセージ(Fatal error: Failed to run 'applier_start' hook)が表示されました。これは、レプリカが開始され、アプライヤー開始フックがNDBの準備ができるまで--ndb-wait-setupで指定された秒数を待機した時に発生しました; それまでに準備ができない場合、開始フックは失敗を報告します。現在、このような場合、代わりに処理を続行させ、NDBからエラーが返されるようにします。これにより、真の原因がより適切に示されます。 (バグ #36054134)
  • 全てのデータノードに到達できない場合、mysqldプロセスがシャットダウンするのに予想よりも長い時間がかかりました。 (バグ #36052113)
  • インジェクタートランザクションのインスタンス化の失敗に対するNDBバイナリログインジェクタースレッドでの処理の必要性を、その操作における潜在的な障害点を削除することで無効にしました。 (バグ #36048889)
  • 特定のケースで、TRPMANブロックが独自の受信スレッド外のトランスポーター上で動作する可能性がありました。 (バグ #36028782)
  • start_clients_thread()とupdate_connections()の両方がDISCONNECTING状態で同じトランスポータを認識しているために、start_clients_thread()とupdate_connections()の間で発生する可能性のある競合状態を削除しました。現在は、トランスポータが切断されたことを示す設定を行う前に、切断が実際に完了していることを確認するようになりました。これにより、update_connections()は、完全にシャットダウンされる前にNdbSocketを閉じることができなくなります。 (バグ #36009860)
  • トランスポータが過負荷になると、送信スレッドは期待どおりにCPUに譲らず、ハードコードされた200マイクロ秒のタイムアウトに達するまでトランスポータを繰り返し再試行します。 (バグ #36004838)
  • スキーマ配布から切断されたMySQLサーバーは、イベント内でテーブル列が見つからなかったため、イベント操作を設定できませんでした。これは、ndb_drop_tableを使用するか、MySQLサーバーを使用して作成されたNDBからテーブルを直接削除する別の手段を使用することによって、発生する可能性があります。
    このような場合に、ディクショナリキャッシュからNDBテーブル定義を適切に無効にすることで、この問題を修正します。 (バグ #35948153)
  • ndb_sign_keysユーティリティの--remote-opensslオプションが期待どおりに機能しませんでした。 (バグ #35853405)
  • レプリカは、Table definition changedエラーの処理中に行の変更を適用できませんでした。現在、そのようなエラーは一時的なエラーとして処理され、複数回再試行できるようになりました。 (バグ #35826145)
  • システム再起動実行の不完全な試行を繰り返すと、場合によっては、クラスタがバックアップから復元しないと回復できない状態になってしまうことがありました。 (バグ #35801548)
  • NDB APIによって使用されるイベントバッファーは、空きメモリの内部プールを維持して、ランタイムおよびオペレーティングシステムとの対話を軽減しながら、不要になったメモリを他の用途に返すことができるようにします。この空きメモリは、割り当てられたメモリの合計から差し引かれ、バッファ制限やその他の目的でレポートおよび使用されるメモリが決定されます。これは32ビット値を使用して表されていたため、4GBを超えると値がラップされ、空きメモリの量が減少したように見えました。これは、ランタイムおよびOSへのイベントバッファメモリの解放、空きメモリのレポート、および、メモリ制限の処理に悪影響を及ぼす可能性がありました。
    これは、プールされた空きメモリの量を表すために64ビット値を使用することで修正されます。 (バグ #35483764)
    参考: バグ #35655162、バグ #35663761も参照してください。
  • START REPLICA、STOP REPLICA、RESET REPLICAステートメントがmysqld.logに書き込まれるようになりました。 (バグ #35207235)
  • mt.cppでのNDBトランスポーターの処理は、同じノードグループ内のノード間で信号を運ぶ隣接トランスポーターと他の全てのトランスポーターを区別しました。これにより、トランスポーターが隣接ノードとそうではないノードを接続すると、複数のトランスポーターで問題が発生することがありました。 (バグ #33800633)
  • 復元操作中のデータノードの一時的な切断によって生成される不要な警告を削除しました。 (バグ #33144487)
  • ユーティリティテーブルのセットアップ中に、スキーマイベントハンドラーはグローバルスキーマロック(GSL)が使用可能になるのを待ってハングすることがありました。これは、物理テーブルがクラスターから削除された場合、または、他の理由で接続が失われた場合に発生する可能性がありました。
    現在は、このような場合にGSLを取得しようとする時にtryロックを使用するようになりました。これにより、グローバルスキーマロックが利用できない場合には、後で別のセットアップチェックが試行されます。 (バグ #32550019、バグ #35949017)
  • APIノードは、データノードからのハートビートの欠落による切断に関連する情報をログに記録しませんでした。 (バグ #29623286)

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


MySQL Editions

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