2024.10.22

MySQL

MySQL 8.0.40 GAリリース(リリース日:2024年10月15日)

C API関連

  • 非同期インターフェイスは、安全でない静的ローカル変数を使用して状態情報を保存しました。(バグ #115703、バグ #36891894)

コンパイル関連

  • MySQLは、Fedora 41ではコンパイルされませんでした。(バグ #37046924)
  • MySQLは、Ubuntu 24.10ではコンパイルされませんでした。(バグ #37042308)
  • Oracleのオープンソースガイドラインに準拠するために、CONTRIBUTING.mdおよびSECURITY.mdファイルをMySQLソースに追加しました。(バグ #36998165)
  • CMAKE_MINIMUM_REQUIREDを、必要な正しいCMakeバージョン(3.14.6)およびMySQLで使用されるサードパーティライブラリのCMakeポリシーに合わせました。(バグ #36978193)
  • システムのcurlライブラリにリンクするのではなくcurlを含むバイナリパッケージは、curl 8.9.1を使用するようにアップグレードされました。curlバージョン 8.9.1で修正された重要な問題については、https://curl.se/docs/security.htmlで説明されています。 (バグ #36967379、バグ #36955197)
  • 同梱のzlibライブラリがバージョン 1.2.13からバージョン 1.3.1にアップグレードされました。(バグ #36950863)
  • CMakeオプション BUILD_SHARED_LIBSおよびCMAKE_SKIP_INSTALL_ALL_DEPENDENCYがビルドのトップレベルでOFFに設定されるようになりました。(バグ #36930664)
  • バンドルされたlibcurlライブラリをバージョン 8.9.0にアップグレードしました。 (バグ #36886877)
  • バンドルされたlz4ライブラリがバージョン 1.10.0にアップグレードされました。(バグ #36886747)
  • CMakeの-DWITHOUT_SERVERオプションは、Enterprise Linux 7では機能しませんでした。(バグ #36824515)
  • MySQLコードベースに使用されるclang-formatのバージョンが10から15にアップグレードされました。(バグ #36500268)
  • バンドルされているTI-RPCのバージョンが1.3.5にアップグレードされました。 (バグ #115698、バグ #36886602)
  • Protobuf 22以降を使用してMySQLをビルドすることはできませんでした。
    (バグ #115163、バグ #36678092)

SQL関数と演算子関連

  • DATABASE()がUNIONクエリの一部として使用された場合、この関数からの出力は切り捨てられました。(バグ #36871927)

    sysスキーマ関連

    • このリリースでは、innodb_lock_waitsビューのパフォーマンスが向上しました。(バグ #36337708)

    スレッドプール関連

    • 一部の同時接続試行が正しく処理されませんでした。(バグ #36625082)

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

    • 重要な変更: OpenSSLライブラリがバンドルされているプラットフォームでは、MySQL ServerのリンクされたOpenSSLライブラリがバージョン 3.0.15に更新されました。詳細については、OpenSSL 3.0 Series Release Notes and OpenSSL Security Advisory [3rd September 2024]を参照してください。(バグ #37021075)
    • mysqlクライアントに--system-commandオプションが追加されました。このオプションは、システムクライアントコマンドを有効または無効にします。
      このオプションはデフォルトで有効にです。無効にするためには、--system-command=OFFまたは--skip-system-commandを使用します。これにより、systemコマンドがエラーで拒否されます。(バグ #36377685、WL #16482)
      参照: バグ #36248967も参照してください。

    主なバグ修正

    • パフォーマンス; InnoDB: MySQL 8.0.28でインラインとして定義されていたInnoDB内部のいくつかの関数は、MySQL 8.0.33ではインラインではなくなりました。これは、MySQL 8.0.30でInnoDBアダプティブハッシュインデックスを改善するために行われた改善に伴うリファクタリングが一因です。これは、InnoDBテーブルでの結合を使用するクエリに悪影響を及ぼしました。(バグ #111538、バグ #35531293)
      参照: この問題は、バグ #81814、バグ #16739204、バグ #23584861のリグレッションです。
    • InnoDB: InnoDBでは、INSTANTアルゴリズムを使用してデフォルト値としてNULLに変更されたREDUNDANTテーブル列の更新が許可されませんでした。代わりに、MySQLが予期せず停止しました。(バグ #36840107)
    • InnoDB: log_files_truncateでredoログ容量が削減されると、まれにfile.end_lsnがlog_sys->write_lsnに等しくなり、将来のredoログ書き込みが許可されなくなることがありました。(バグ #36730830)
    • InnoDB: INSTANTアルゴリズムを使用して列が削除された後にDELETEまたはUPDATEステートメントを実行すると、MySQLサーバーが予期せず停止することがありました。 (バグ #36723117)
    • InnoDB: 照合順序は同じだがバイト数が異なるトークンでは、FTSインデックスの最適化が正しく機能しないことがあります。(バグ #36652127)
    • InnoDB: コンパイル時に最適化されないように、std::this_thread::sleep_for(std::chrono::seconds(0))の使用をstd::this_thread::yield()に置き換えました。(バグ #36522343)
    • InnoDB: データベースに、ユーザーが作成したFTS_DOC_ID列をプライマリキーとして、MySQL 5.7で作成されたフルテキストインデックスが含まれている場合、アップグレードプロセスが予期せず停止しました。
      (バグ #36496164)
    • InnoDB: 複数値の仮想列の範囲条件付きインデックスのオプティマイザーを無効にしました。(バグ #36341532)
    • InnoDB: Windowsで、ファイルアクセスを遅くする二重書き込みバッファのリグレッションを修正し、ファイルを開くためのFILE_FLAG_OVERLAPPEDフラグの使用をリファクタリングしました。(バグ #36259487)
    • InnoDB: テーブルが作成時とは異なるsql_modeでインポートされると、スキーマの不一致が発生する可能性がありました。これは、STRICTモードがテーブルのセカンダリインデックス内のnull可能列の数に影響するためです。現在は、テーブルスペースがインポートされた後にセカンダリインデックスツリーの破損もチェックされます。(バグ #35799038)
    • InnoDB: FTSインデックスを持つテーブルの場合、そのテーブルスペースが破棄されると、対応するFTSテーブルも削除されます。これらのテーブルをクリアする操作を実行すると、コードは、FTSインデックスがテーブルメタデータに存在する場合はFTSテーブルも存在するはずだと誤って想定していました。(バグ #35343458)
    • InnoDB: システムがFusionIOの異なるセクターサイズをサポートしているかどうかを確認する時に、初期化されていないバッファが一時ファイルに書き込まれていました。このチェックは、innodb_flush_methodがO_DIRECTまたはO_DIRECT_NO_FSYNCに設定されている場合に行われます。 (バグ #115229、バグ #36705034)
    • InnoDB: セカンダリインデックスを含むテーブル再構築操作では、MySQL 8.0.26と比較してInnoDB一時ファイルのファイル I/Oがより多く必要で、クエリのパフォーマンスが低下しました。(バグ #114465、バグ #36444172)
    • InnoDB: Alter_stageクラスの問題により、パフォーマンススキーマを有効にすると、並列インデックスビルダーを使用したインデックスの追加が大幅に遅くなりました。(バグ #113505、バグ #36163502)
    • InnoDB: 最近のオプティマイザーの変更をより適切に考慮するためにinnodb.parallel_read_kill関連のユニットテストを修正し、innodb.ddl_killユニットテストとそれに関連するマクロの使用を修正しました。
      (バグ #113002、バグ #115416、バグ #35992036、バグ #36764973)
      参考: バグ #112767も参照してください。
    • パーティショニング: ALTER TABLEは、パーティション分割されたテーブルでは必ずしも正しく動作しませんでした。(バグ #36677952)
    • グループレプリケーション: 特定の状況下では、プライマリホストでネットワークが短時間非アクティブになると、全てのセカンダリが予期せずシャットダウンします。(バグ #35642087)
      参照: バグ #32673639、バグ #34565855も参照してください。
    • グループレプリケーション: 報告されたスレッドによって集計されたメモリは、割り当てられたものから他のスレッドによって解放された全てのmemory/sql/Gtid_set::Interval_chunkを考慮に入れていなかったため、グループレプリケーションスレッド thread/group_rpl/THD_applier_module_receiverによるリソースの消費が不適切に増加し続けました。
      performance_schema.memory_summary_global_by_event_nameによって報告されたグローバルメモリは、この問題の影響を受けませんでした。 (バグ #34819861)
    • グループレプリケーション: xcom\network\xcom_network_provider_native_lib.ccから潜在的なメモリリークを削除しました。(バグ #115162、バグ #36673883)
    • サーバーは、スレッドプールプラグインと監査ログプラグインの両方で実行している場合、接続を正しく処理しないことがありました。(バグ #37039422)
    • Debianベースのシステム用のパッケージは、WITH_ZLIB=systemでビルドされ、デバッグビルドではMYSQL_MAINTAINER_MODEを無効にします。(バグ #37038213)
    • 商用ビルドにバンドルされているKerberosライブラリをバージョン 1.21.3に更新しました。詳細については、Kerberos 5 1.21.x Release Notesを参照してください。 (バグ #37034600)
    • regexp::Regexp_facade::~Regexp_facade()のヒープ使用後の解放に関する警告を削除しました。(バグ #36867806)
    • テーブルスペースをダンプする際、mysqldumpはその出力内の特定のSQLステートメントを適切にエスケープしませんでした。さらに、ダンプでは、次の識別子がバックティックで囲まれるようになりました: LOGFILE GROUP、TABLESPACE、ENGINE。(バグ #36816986)
    • sql/sql_executor.ccの問題に対する以前の修正では、const_for_execution()ではなくconst_item()がチェックされていました。(バグ #36804785)
      参照: この問題は、バグ #34951115のリグレッションです。
    • IndexRangeScanIteratorを使用してインデックス範囲スキャンを実行する際、リファクタリング中にIndexRangeScanIterator::m_expected_rowsに使用されるデータ型がdoubleからbooleanに変更されたため、レコードバッファーが設定されませんでした。この意図しない変更は元に戻されました。
      さらに、レコードバッファがインデックス範囲スキャン用に有効になっている場合、これらのスキャンをカバーするために使用される多値インデックスで問題が発生しました。(これは、インデックスマージスキャンがカバーインデックススキャンを強制するため、インデックスマージスキャンの一部として使用される場合にのみ起こり得ます。) 問題の原因は、Field_typed_array::key_cmp()の実装では、インデックス式に生成された列の値が必要であり、この列は多値インデックスでは使用できないため、ストレージエンジンが、カバースキャン用にレコードバッファを埋める時に終了範囲条件を安全に評価できないことでした。これを修正するために、カバーインデックス範囲スキャンに多値インデックスが使用される場合は、レコードバッファを無効にするようになりました。(バグ #36775910)
      参照: バグ #36341532も参照してください。
    • 特定のトリガーとストアドプロシージャが正しく処理されませんでした。(バグ #36775910)
    • 外部テーブルを参照する時に発生する一部のエラーが正しく処理されませんでした。 (バグ #36758378)
    • Debianでは、LTOビルドの互換性を高めるために、libmysqlclient.aのストリップを停止しました。(バグ #36737581)
    • 内部関数 my_convert_internal()は、意図した値ではなくポインタを返すことがありました。(バグ #36684463)
      参照: この問題は、バグ #36479091のリグレッションです。
    • サーバーコンポーネントのメモリの問題が解消されました。(バグ #36600205)
    • mysqlクライアントのメモリリークが修正されました。(バグ #36600203)
    • AES_ENCRYPT()関数が常に有効な結果を返しませんでした。(バグ #36593265)
    • 場合によっては、非常に多くの行と多数のテーブルを含む結合が正しく処理されませんでした。(バグ #36562979)
    • 同じトランザクションでFULLTEXTインデックスを追加したDROP INDEXを実行すると、予期しないサーバー終了が発生する場合がありました。(バグ #36559642)
    • オプティマイザヒントの組み合わせによっては、正しく機能しないものがありました。(バグ #36492114)
    • 以前の問題の修正に続いて、GROUP BYの一部であり、SELECTリストに見つからないconst項目は、フィールドリストに非表示項目として追加されませんが、一時テーブルの作成中にROLLUP操作を含む式の置換をチェックする際には、この点が考慮されませんでした。フィールドリストに見つからない項目がconst項目であるかどうかをチェックし、そうである場合は、同じ項目を置換として使用することで、この問題を修正しました。 (バグ #36444257)
      参照: この問題は、バグ #34951115のリグレッションです。
    • データマスキング関数 gen_rnd_pan()およびmask_ssn()のテスト中に見つかったアサーションを削除しました。(バグ #36397869、バグ #36398272)
      参照: バグ #36398221も参照してください。
    • FTS比較に関する問題を修正しました。
      (バグ #36210202)
    • RelWithDebInfoビルドは"-g1"フラグでコンパイルされなくなったため、使用可能なデバッグ情報と生成されるファイルサイズが増加しました。 (バグ #36111629)
      参照: バグ #33664929も参照してください。
    • サーバーが--skip-grant-tablesで実行された時の潜在的な誤動作を修正しました。(バグ #36043213)
    • 結合のON条件で外部クエリブロックのテーブルからの列への参照に関する問題に対する以前の修正でのリグレッションを修正しました。(バグ #35854686)
      参照: この問題は、バグ #96946、バグ #30350696のリグレッションです。
    • まれに、外部キーを持つテーブルの作成を含むCREATE TABLEステートメントが正しく処理されない場合がありました。 (バグ #35553557)
    • SHOW INDEXと生成された列に関する問題を修正しました。(バグ #35497623)
    • 場合によっては、プリペアドステートメントのテーブルDDLが正しく処理されませんでした。(バグ #35221658)
    • SLES 15のターゲットプラットフォームをopenSUSE 15.5から15.6に変更しました。これは、GCC 12ではなくGCC 13を使用し、OpenSSL 1.1.xではなくシステムのOpenSSL 3.xに対してビルドすることを意味します。(バグ #115535、バグ #36934913)
    • Debianパッケージの説明の誤字を修正しました。
      (バグ #115363、バグ #36749142)
    • prefer_ordering_index=offの場合、参照キーのないクエリは、ソートを回避できるはずであるにも関わらず、テーブル全体のスキャンとソートに戻りました。
      (バグ #113699、バグ #36213938)
    • パフォーマンススキーマのdata_locksテーブルとdata_lock_waitsテーブルを再設計して、クエリを実行する際にトランザクションまたはロックシステム上の排他的グローバルミューテックスを必要としないようにしました。以前はトランザクションを反復していましたが、現在はロックを保持するハッシュテーブルのバケットを反復して、アクティブに処理されているシャードのみをラッチします。これにより、速度とメモリの観点から反復ロジックの複雑さも改善され、これらのクエリがシステムの他の部分に与える影響が軽減されます。
      2つのバケットを訪問する間に一連の所有されているロックをコミット、開始、またはその他の方法で変更した場合、クエリ結果にトランザクションロックの不完全なリストが表示される可能性があることに注意してください。これは、2つの異なるトランザクションが異なる時点で表示される可能性があったにもかかわらず、常に個々のトランザクションによって保持されているロックの一貫したスナップショットを表示していた以前の動作とは異なります。言い換えると、新しいアプローチでは、競合するロックと待機中のロックが常に同じバケット内にあるため、それらを表示するために単一の待機キューの一貫したビューが提供され、古いアプローチではそれらのロックが他のトランザクションに属していたため、それらの一部が見逃される可能性がありました。古いアプローチでは、報告されたトランザクションによって保持されている他の全てのロックが常に表示されていましたが、競合している場合でも他のトランザクションのロックが表示されない可能性がありました。(バグ #112035、バグ #113761、バグ #36302624、バグ #36015586、バグ #36690035、バグ #35712638、バグ #36891888)
    • 複数値インデックスを使用して大なり (>) または小なり (<) の比較を使用するクエリは、同じインデックスで等号 (=) の比較を使用する同じクエリよりも実行速度がはるかに遅くなりました。(バグ #104897、バグ #33334911)
    • 負荷の高いインスタンスで SELECT * FROM sys.innodb_lock_waits; を実行すると、サーバーのパフォーマンスに影響しました。
      このリリースでは、SELECT * FROM sys.innodb_lock_waits; は、待機ごとに全てのロックを2回スキャンするのではなく、待機ごとに2つのロックのみを取得します。
      この修正の一環として、DATA_LOCKSとDATA_LOCK_WAITSにプライマリキーが追加されました。 (バグ #100537、バグ #31763497)

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


    MySQL Editions

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