2024.05.09

MySQL

MySQL 8.0.37 GA(リリース日:2024年4月30日)

監査ログ関連

  • MySQLは、プラグインのタイプに関係なく、有効なプラグイン構造体を引数として使用して、plugin->deinit()を呼び出すようになりました。

    文字セット関連

    • character_set_serverシステム変数は、SET PERSISTまたはSET GLOBALを使用して設定された時、新しいクライアントセッションの場合、または、サーバーの再起動後にサーバーへの接続を確立するクライアントの場合には有効になりませんでした。唯一の回避策は、サーバーの起動時に対応するコマンドラインオプションを設定することでした。
      これを修正するために、サーバーの再起動時に変数設定が期待どおりに有効になるように設定データが正しい順序で読み取られるようになりました。 (バグ #35529604)

    コンパイル関連

    • s390xアーキテクチャのサイクルタイマーを改善しました。
      (バグ #112845、バグ #35949958)

    コンポーネント関連

    • --loose プレフィックスを使用して設定されたコンポーネント オプションの値は、コンポーネントのインストール時に読み取られませんでした。 (バグ #28341329)

    オプティマイザー関連

    • マルチレンジ読み取り (MRR) の最適化は、以前のリリースほどパフォーマンスが良くありませんでした。 (バグ #113711、バグ #36220640)

    パフォーマンススキーマ関連

    • 10進数値が割り当てられたユーザー変数は、user_variables_by_threadテーブルで切り上げられました。 (バグ #35781732)
    • 負荷が高いサーバー上でSELECT * from performance_schema.data_locksを実行すると、MySQLが大量のメモリを消費し、予期せず終了する可能性がありました。
      このリリースの時点で、このようなクエリの実行に使用されるメモリは、memory/performance_schema/data_containerで計測されるようになり、メモリ消費を観察できるようになりました。 (バグ #35240825)
    • 負荷の高いサーバー上でSELECT * from performance_schema.data_locksを実行すると、InnoDBでデッドロックが発生する可能性がありました。 (バグ #35068461)
      参考: バグ #35240825も参照してください。

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

    • 重要な変更; グループレプリケーション: group_replication_consistencyをBEFORE_ON_PRIMARY_FAILOVERに設定して発行すると、MySQL KILLステートメントは整合性保証を無視し、中断されたトランザクションはロールバックされるようになりました。
    • 重要な変更: OpenSSLライブラリがバンドルされているプラットフォームの場合、MySQL Server用のリンクされたOpenSSLライブラリがバージョン 3.0.13に更新されました。OpenSSL バージョン 3.0.13で修正された問題については、https://www.openssl.org/news/cl30.txtで説明されています。 (バグ #36261675)
    • パッケージ: Fedora 40およびUbuntu 24.04のサポートを追加しました。
    • Microsoft Windows: MySQL Windowsバイナリファイル(.exeおよび.dllファイル)のプロパティを表示する時に、追加情報が表示されるようになりました。 (バグ #36379291)
    • クローンプラグインのバージョン要件が緩和され、同じシリーズの異なるポイントリリース間でクローンを作成できるようになりました。つまり、以前はポイントリリース番号も一致する必要がありましたが、メジャーバージョン番号とマイナーバージョン番号のみが一致する必要があります。
      例えば、クローン機能により、8.4.0から8.4.14へ、および、8.0.51から8.0.37へのクローン作成が可能になりました。8.0の場合、8.0.37より古いバージョンには以前の制限が引き続き適用されるため、8.0.36から8.0.42のようなクローン作成、または、その逆のクローン作成は許可されません。 (バグ #36293529、WL #15989)

    主なバグ修正

    • 重要な変更: Robin Hoodハッシュライブラリは、unordered_denseに置き換えられました。 (バグ #36158022)
    • InnoDB; Microsoft Windows: REDOログファイルをオーバーラップモードで開くことにより、WindowsでのREDOログのパフォーマンスが向上しました。 (バグ #36154818)
      参考: この問題は、バグ #12527のリグレッションです。
    • InnoDB: ログライターは、log.writer_mutexを一時的に解放する関数を呼び出します。これにより、innodb_log_writer_threads=OFFの場合、間に他のスレッドがREDOログに書き込む可能性があります。 (バグ #36425219)
    • InnoDB: FTSインデックスを持つテーブルに対する一部のFTS操作により、一貫性のない結果が発生する可能性がありました。例えば、FTSキャッシュの同期中にサーバーが終了した場合や、別のFTS操作と同時に同期が発生した場合などです。
      (バグ #36343647)
    • InnoDB: データを含むテーブルにインデックスを作成する時に、valgrindがddl::Builder::bulk_add_rowからの初期化されていないメモリの読み取りを報告することがありました。 (バグ #36342792)
    • InnoDB: Windowsでは、共有書き込みロックなしでファイルを開いたままfil_shardミューテックスを取得しようとすると、fil_shardミューテックスを取得して同じファイルにアクセスしようとした別のスレッドとの間でデッドロックが発生しました。 (バグ #36159317)
      参考: バグ #32808809も参照してください。
    • InnoDB: リカバリ中に"Found existing redo log files, but at least one is missing"エラーが発生する可能性がある潜在的なREDOログローテーションの問題を修正しました。 (バグ #36124625)
    • InnoDB: フルテキストインデックスに関連するアサーションエラーが見つかり、修正されました。 (バグ #35836581)
    • InnoDB: アサーションの失敗を引き起こす可能性がある状況である、テーブルスペースの削除プロセス中のバッファ処理が改善されました。 (バグ #35676106、バグ #36343647)
    • InnoDB: システムスキーマ内のMySQLテーブルに8.0.29より前に追加されたINSTANT ADDカラムがあり(そのバージョンでは許可されていない)、MySQLが8.0.29以降のバージョンにアップグレードされた後、これらのテーブルでDMLを実行すると、サーバーが予期せず終了する可能性があります。
      (バグ #35625510、バグ #35981565、バグ #36180360)
    • InnoDB: REDOログがインスタントDDLを使用した列順序の変更をログに記録しない可能性があり、これによりリカバリ中に不正なログ再生が発生する可能性がありました。 (バグ #35183686)
    • InnoDB: SHOW ENGINE INNODB STATUSの結果で、最初の結果として無効な値(NULL)が表示されました。 (バグ #113819、バグ #36118112)
      参考: この問題は、バグ #34992157のリグレッションです。
    • InnoDB: innodb_parallel_read_threadsが1より大きい値に設定されていると、InnoDBは先読みヒューリスティックを不必要に無効にし、ページがまだバッファプールにない時にストールを引き起こしました。 (バグ #113482、バグ #36142806)
    • InnoDB: TempTableストレージエンジンで一意のハッシュインデックスを使用するクエリを実行すると、MEMORYエンジンでクエリを実行する場合に比べて、大幅に時間がかかる可能性がありました。
      (バグ #113178、バグ #36037224、バグ #36224958)
    • InnoDB: デバッグビルドでは、MDLロックを取得しようとしたトランザクションがアクティブでなくなった時に、InnoDBのバックグラウンドでアサーションエラーが発生しました。
      (バグ #112424、バグ #35835864)
      参考: この問題は、バグ #33700835のリグレッションです。
    • InnoDB: innodb_parallel_read_threadsが1より大きい値に設定されていると、InnoDBは不必要に非同期読み取りを要求します。これにより、I/O完了中にさらに多くの同期が必要となり、I/O操作の処理に使用できるスレッド(innodb_read_io_threads)の数が限られているためにボトルネックが発生しました。現在は、非同期読み取りではなく同期読み取りが実行されるようになりました。 (バグ #112137、バグ #35740866)
    • InnoDB: trxは、不正なtrx->in_innodb値に遭遇すると予期せず停止します。
      (バグ #110652、バグ #35277407)
    • InnoDB: MySQLは、セカンダリインデックススキャンを使用するオプティマイザヒントを無視しなくなり、代わりにクラスター化 (並列) インデックススキャンが強制的に実行されます。さらに、クラスター化インデックスの使用を強制するインデックスヒントを提供する機能が追加されました。 (バグ #100597、バグ #112767、バグ #31791868、バグ #35952353)
      参考: この問題は、バグ #12978のリグレッションです。
    • グループレプリケーション: メンバー M1は回復ユーザーとしてu1を使用し、M2は自身の回復ユーザーとしてu2を使用し、かつ、ユーザー u1とu2は両方とも全ての必要な権限を持ってM1とM2に存在し、かつ、新しいメンバー M3が回復ユーザーとしてu2を使用してグループに参加した時に、メンバー M1とM2がグループに所属している場合に問題が発生しました。M3はユーザー u2のみを認識していましたが、ユーザー u1については認識していなかったので、M1がM2に接続できなかったために、M2でのSTART GROUP REPLICATIONが拒否されました。これにより、グループメンバーをM1およびM2としてリストする新しい view_idも生成されましたが、それでも、M1はM3への接続を試行し続け、M1はmysql接続確立時のエラーをログに記録し、M3はM1からの接続試行に対するアクセス拒否エラーをログに記録しました。
      仕様により、XComは、過去と現在の全ての設定間で共有される物理接続への参照を含む、最後の3つの既知の設定を保存します。これは、明示的または暗黙的に、グループに再参加し、それらの設定のいずれかに既に存在していたノードによる迅速な再接続を容易にするために行われます。
      この副作用として、現在グループに含まれていないノードへの接続が試行され続ける可能性があります。この問題を解決するためには、DBAやオペレーターがシステムに問題があると誤って考える可能性のある誤検出を回避するために、ノードが現在の設定にない場合はエラーロギングを禁止します。 (バグ #36210988)
      参考: バグ #32592027も参照してください。
    • グループレプリケーション: GTIDセットの処理が改善されました。 (バグ #36093405)
    • グループレプリケーション: メンバーがグループを抜けてERROR状態に移行したが、group_replication_exit_state_actionで指定されたアクションを受け入れなかった2つのケースが見つかりました。これらはここにリストされています:
      • super_read_onlyを有効にする時にエラーが発生した場合
      • グループメンバーのバイナリログとクローングループが欠落しているため、メンバーの参加の回復ができなかった場合

      例: group_replication_exit_state_actionの値がOFFLINE_MODEで、これらのイベントのいずれかが発生した場合、オフラインモードは期待どおりに有効になりませんでした。 (バグ #36076308)

    • グループレプリケーション: 新しいプライマリの設定に成功した後、場合によっては、group_replication_set_as_primary()が操作が完了するまで無期限に待機しました。 (バグ #36059098)
    • JSON: JOINとGROUP BYは、一部のJSON列値を異なる方法で処理しました。 (バグ #101048、バグ #31969607)
    • MySQL NDB ClusterJ: setLimits()メソッドがdeletePersistentAll()にチェーンされ、削除する項目の数を制限できるようになりました。 (バグ #36049906)
    • CMakeとBisonに現在必要なバージョンに合わせてBuildRequireルールを更新しました。 (バグ #36343254)
    • SET GLOBAL offline_mode=ONは、高負荷時に発行されると、常に正しく動作するとは限りませんでした。 (バグ #36275182)
      参考: バグ #36405894も参照してください。
    • curlをバージョン 8.6.0にアップグレードしました。 (バグ #36267545)
    • mysqldumpは、サーバーのバージョンを常に正しく解釈するとは限りませんでした。 (バグ #36248967)
      参考: バグ #36405879も参照してください。
    • ビューのクエリ時に使用された文字セットとは異なる文字セットでビューが作成された場合、ビューへの条件プッシュダウンは照合順序の不一致により拒否されました。 (バグ #36246859)
    • 非推奨のexec_program()コマンドの使用は、CMake 3.28.1以降との互換性を提供するために、execute_process()に置き換えられました。 (バグ #36220656)
    • protobufライブラリをバージョン 25.1にアップグレードしました。 (バグ #36108397)
    • Enterprise Linux RPMを構築する場合、ビルドスクリプトは新しいストリップコマンド (/opt/rh/gcc-toolset-12の下) を指すようになり、対応するdwzツールが利用可能であることを確認するようになりました。以前は、これはEL8に対してのみ実装されていました。 (バグ #36090069)
    • リンク時の最適化を使用してOracle Linux上に構築する場合は、gcc-arとgcc-ranlibを検索するようになりました。 (バグ #36089900)
    • サーバーは、特定のクエリへの応答で予期せず終了することがありました。 (バグ #35957627)
    • ビューおよびテーブルDDLによるビューおよびトリガー定義者の処理が改善されました。 (バグ #35942937)
    • サーバーは、特定のクエリに対して常にメタデータをクライアントに正しく返すとは限りませんでした。 (バグ #35904044)
    • 複数値インデックスを持つテーブルに対してクエリを実行すると、サーバーが予期せず終了することがありました。多くの場合、このインデックスを使用した複雑なSELECTクエリの実行中に発生しました。 (バグ #35789759)
    • sql/item_subselect.ccのコードが改善されました。 (バグ #35733778、バグ #35738531、バグ #35779012)
    • CREATE USER IF EXISTSが常に正しくログに記録されるとは限りませんでした。 (バグ #35530823)
    • サーバーはパーティション式でのサブクエリを適切に禁止しませんでした。これらは無効であり、構文エラーを発生させなければいけません。 (バグ #35476172)
    • 一部のRANK() ... OVER()クエリは、sql/sql_executor.ccでアサーションを生成しました。 (バグ #35228083)
    • 複数の連続したALTER TABLE ... ALGORITHM=COPYステートメントが互いに10秒以内に発行されると、n_rows値が0になりました。 (バグ #35127747)
    • Boost C++ライブラリのダウンロードに使用されるURLを更新しました。 (バグ #113576、バグ #36164514)
    • MySQL 8.0.30で初めて対処された以前の問題の修正は不完全でした。
      (バグ #113174、バグ #36035044)
      参考: この問題は、バグ #110801、バグ #35328028のリグレッションです。
    • s390xでは、過剰最適化を避けるために、-O2を使用してFMAテストをコンパイルするようになりました。
      (バグ #113096、バグ #36016140)
    • s390xはビッグエンディアンプラットフォームですが、コンパイルにはリトルエンディアンICUデータディレクトリが使用されました。
      (バグ #113095、バグ #36016141)
    • ルーズインデックススキャンによるグループを使用したクエリから、誤った結果が得られることがありました。 (バグ #112541、バグ #35854362)
    • CHAR(0)やBINARY(0)など、長さ0の列を持つデータをテーブルに挿入する時に、デバッグビルドでアサーションが失敗しました。現在では、それほど厳密ではないアサーションは、ソースからコピーされたゼロ以外のバイト数がターゲットと同一であることが検出された場合にのみ、より正確に失敗します。 (バグ #111450、バグ #35507763)
    • 相関ラテラルサブクエリまたは(その他の)依存サブクエリのVALUESステートメントにより、誤った結果が生成されました。 (バグ #109252、バグ #110076、バグ #34852090、バグ #35087820)

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


    MySQL Editions

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