2023.10.31

MySQL

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

監査ログ関連

  • MySQL Enterprise Auditの削除を簡素化するために、新しいスクリプト audit_log_filter_uninstall.sqlを追加しました。 (バグ #35611072)

認証関連

  • 以前に非推奨になったプラグイン mysql_native_passwordは必須ではなくなり、サーバー起動時に無効にできるようになりました。
    注意
    サーバー側のmysql_native_password認証方法が無効になっている場合、クライアント側プラグイン
    (MySQL 5.5より前、場合によりMySQL 5.6)を使用する古いクライアントアカウントは接続できなくなり、
    サーバーはアクセス拒否メッセージをエラーログに書き込みます。プロトコルの互換性は保たれていますが、
    クライアントでサポートされている認証方法が欠落しているため、これらの接続は不可能になります。

    (WL #15667)

  • MySQL Enterprise Editionは、WebAuthnコンテキストでスマートカード、セキュリティキー、生体認証リーダーなどのデバイスを使用したMySQL Serverへの認証をサポートするようになりました。新しい認証方法 WebAuthnは、FIDO標準およびFIDO2標準に基づいています。サーバー側ではauthentication_webauthn、クライアント側ではauthentication_webauthn_clientという一対のプラグインを使用します。サーバー側の認証プラグイン WebAuthnは、MySQL Enterprise Editionディストリビューションにのみ含まれています。
    プラガブルなFIDO認証方法は、WebAuthn認証の導入により非推奨になりました。 (WL #15006)

C API関連

  • クライアントライブラリは、新しいC APIプリペアドステートメント関数である mysql_stmt_bind_named_param()の導入により、プリペアドステートメントでのクエリ属性の使用をサポートするようになりました。mysql_stmt_bind_named_param()は、現在非推奨になっている mysql_stmt_bind_param()関数を置き換えます。mysql_stmt_bind_param()とは異なり、mysql_stmt_bind_named_param()では、プリペアドステートメントの名前なしパラメータと名前付きパラメータの両方をバインドできます。 (バグ #35435138、WL #15803)
  • MySQL 5.1やMySQL 5.0などの以前のディストリビューションには、プラガブル認証をアドバタイズしないサーバーが含まれていました。プラガブルな認証方法を使用する新しいクライアントがこれらの古いサーバーの1つに接続しようとすると、サーバーは“bad handshake”エラーメッセージを発行しました。この修正により、クライアント側の認証(特に--default-authオプション)が、プラガブル認証をサポートしていないサーバーを含む全てのサーバーで適切に機能するようになりました。さらに、サーバーがプラガブル認証をサポートしていない場合、デフォルトの認証方法としてmysql_native_passwordがcaching_sha2_passwordに置き換わるようになりました。 (バグ #90994、バグ #28082093)
  • mysql_ssl_set() C API関数は非推奨となり、将来のMySQLリリースで削除される可能性があります。全てのmysql_ssl_set()パラメータに同等のmysql_options() TLSオプションがあります。 (WL #11091)

コンパイル関連

  • Microsoft Windows: 最新のMSVC 2022のバージョン v17.7.2でコンパイルするようにコードを更新しました。 (バグ #35737379)
  • MYSQL_PARSE_ARGUMENTSマクロと廃止された support-files/compiler_warnings.supファイルを削除しました。 (バグ #35661316)
  • WITH_CURL CMakeオプションをbundledに設定すると、extra/curl/にあるバンドルされたCURLディストリビューションが使用されるようになりました。 (バグ #35649213)
  • MySQL 8.1.0では32ビットがサポートされていないため、32ビットアーキテクチャに関連するCMake設定定義を削除しました。 (バグ #35621081)
  • CMakeコード内のtelemetry_clientおよびcomponent_telemetryのRPATH定義を修正し、デバッグモードを有効にしても適切にビルドできるようにしました。 (バグ #35598485)
  • 最低限必要なCMakeバージョンが3.5.1から3.14.6に増加しました。 (バグ #35553331)
  • keyring_encrypted_fileソース ファイルの非常に長いパス名は、Windowsコンパイラによって確立される256文字の制限に準拠するために短縮されました。 (バグ #35493420)
  • WindowsでのclangサポートのためにASANが改善されました。 (バグ #35468711)
  • macOSでコンパイルすると、openssl@1.1が明示的に検索されますが、openssl@3も許可するために汎用のopensslシンボリックリンクが検索されるようになりました。 (バグ #35468370)
  • WITH_DEVELOPER_ENTITLEMENTS macOS CMakeオプションを修正しました。タイプミスのため有効になりませんでした。 (バグ #35374026)
  • Linux用の実験的なC++20コンパイラサポートを追加しました。使用するためには、GCC 10+またはClang 11+が必要です。 (バグ #35362952、バグ #35667284)
  • 標準のCMake OpenSSL::SSLライブラリとOpenSSL::Cryptoライブラリを利用することで、OpenSSLのインポート方法が簡素化されました。"system"タイプはFIND_PACKAGEを使用し、代替システムタイプはpkg-configを使用し、カスタムパスはFIND_PATH/FIND_FILE/FIND_LIBRARYを使用します。 (バグ #35140672)
  • Clang 12でコンパイルする時に生成される文字列連結の警告を修正しました。(バグ #111614、バグ #35549962)
  • WITH_ZLIB機能をさらに改善しました。 (バグ #111549、バグ #35534309)
  • Protobuf 22ではAbseil依存関係が追加されているため、Protobuf 22以降ではWITH_PROTOBUF=systemを使用したビルドが失敗しました。 (バグ #111469、バグ #111623、バグ #35546459、バグ #35550389)
  • WITH_ZLIB="system"を指定してビルドすると、ZLIBが見つからないため、MySQLビルドが中断されます。
    (バグ #111467、バグ #35511210)
    参考: この問題は、バグ #35057542のリグレッションです。
  • EL7 aarch64ベースのプラットフォームで、MySQLサーバーが予期せず停止する原因となったCPUキャッシュラインサイズの取得時に0が返される方法に関連する問題が修正されました。 (バグ #110752、バグ #35479763)
    参考: バグ #107081、バグ #34095278も参照してください。
  • C++標準化委員会のライブラリワーキンググループは最近、std::pairの比較演算子の定義方法を変更する問題(LWG-3865 Sorting a range of pairs)を解決しました。この修正により、この変更に合わせてsql/authの2つのファイルで使用される等価演算子が更新されます。
    Microsoft Visual Studioチームによる提案に基づいています。 (バグ #110254、バグ #35137978)

非推奨と削除関連

  • 互換性のない変更: MySQL 8.0で非推奨となった WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS() SQL関数は削除されました。これを呼び出そうとすると、構文エラーが発生します。代わりにWAIT_FOR_EXECUTED_GTID_SET()を使用してください。 (WL #13180)
  • レプリケーション: binlog_transaction_dependency_trackingサーバーシステム変数は現在非推奨となり、MySQLの将来のバージョンで削除される可能性があります。この変数の値を設定または取得すると、同等の起動オプション --binlog-transaction-dependency-trackingを使用した場合と同様に、警告がトリガーされるようになりました。この変数(またはオプション)に依存するアプリケーションは、できるだけ早くそれからの移行を開始する必要があります。この変数またはその機能の置き換えは計画されておらず、必要もありません。 (WL #13964)
  • expire_logs_daysサーバーシステム変数はMySQL 8.0で非推奨になり、現在は削除され、サポートされなくなりました。つまり、このリリース以降、実行時にこの変数を取得または設定しようとするとエラーが発生します。同等の起動オプション(--expire-logs-days)を使用してサーバーを起動しようとしても、エラーが発生して拒否されるようになりました。
    expire_logs_daysではなくbinlog_expire_logs_secondsを使用してください。この変数は引き続きサポートされており、整数の日数以外の単位で有効期限を指定できます。 (WL #11006)
  • サーバー起動オプション --abort-slave-event-countおよび--disconnect-slave-event-countは、MySQL 8.0で非推奨となり、このリリースで削除されました。これらのオプションのいずれかを使用してmysqldを起動しようとすると、エラーが発生します。
    これらのオプションは、以前はテストで使用されていました。それらの代替は計画されていません。 (WL #14854)
  • oldおよびnewサーバーシステム変数は非推奨になり、これらの変数のいずれかが設定または読み取られる度に警告が発行されるようになりました。これらの変数はMySQLの将来のバージョンで削除される予定です。これらに依存するアプリケーションは、できるだけ早くそのような依存関係から移行する必要があります。 (WL #8609)
  • --character-set-client-handshakeサーバーオプションは、もともとMySQLの非常に古いバージョンからのアップグレードで使用することを目的としていましたが、現在は非推奨となっており、使用する度に警告が発行されます。このオプションはMySQLの将来のバージョンで削除される予定です。このオプションに依存するアプリケーションは、できるだけ早くこのオプションからの移行を開始する必要があります。 (WL #13220)
  • このリリースの2つの変更は、MySQLの権限の設定に影響します。これらの変更の1つはデータベースの権限設定に影響を与えます。もう1つは、権限設定で使用されるホスト名に関するものです。これらの変更は以下のとおりです:
    • データベースレベルの権限設定。データベースレベルの権限設定でワイルドカードとして文字 % と _ を使用することは現在非推奨となっており、このワイルドカード機能は将来のMySQLリリースで削除される予定です。これらの文字は、partial_revokesサーバーシステム変数の値がONの場合は常にリテラルとして扱われるため、常にリテラルとして扱われることを目的としています。
      例えば、partial_revokesをONに設定すると、GRANT SELECT ON db_.* TO user1により、user1は db_という名前のデータベース内のテーブルから選択できますが、データベース db1、db2、dbx、dbyなどのテーブルから選択することはできません。権限設定のデータベース名でのワイルドカードのサポートが削除されると、常にこれが当てはまると想定してください。
    • 権限設定内のホスト名 '%'。 権限をチェックする際のlocalhostの同義語としてのサーバーによる%の扱いも現在非推奨となっており、MySQLの将来のバージョンで削除される可能性があります。
      現在、'user1'@'%'に付与されている権限は、'user1'@'localhost'にも付与されています。この自動割り当ては現在非推奨です。この動作が削除されると、常に、localhostのホスト名を使用して、'user1'@'localhost'に明示的に権限を付与する必要があります。

      注意
      上記のどちらの場合も、ユーザーセッションやログに警告やエラーは表示されません。
      これは、そのようなメッセージがすぐに大量に生成される可能性があるためです。

    (WL #14280、WL #15676)

  • INFORMATION_SCHEMA.PROCESSLISTは非推奨であり、将来のMySQLリリースで削除される可能性があります。そのため、そのテーブルを使用するSHOW PROCESSLISTの実装も非推奨になります。
    代わりにSHOW PROCESSLISTのパフォーマンススキーマ実装を使用することをお勧めします。そのため、performance_schema_show_processlistも非推奨となり、将来のMySQLリリースで削除される可能性があります。 (WL #15915)
  • SET_USER_ID権限は非推奨であり、MySQLの将来のバージョンで削除される可能性があります。GRANTを使用してSET_USER_IDが付与されると、SQL警告によって非推奨ステータスが通知されます。現在は、次の新しい権限に置き換えられています:
    • 定義者オブジェクト作成用のSET_ANY_DEFINER。
    • 孤立したオブジェクト保護のためのALLOW_NONEXISTENT_DEFINER。

    CREATE PROCEDURE、CREATE FUNCTION、CREATE TRIGGER、CREATE EVENT、または、CREATE VIEWを使用して孤立したSQLオブジェクトを生成するためには、新しい権限の両方が必要です。
    MySQL Serverのアップグレード中、これらの権限は次のように共存します:

    • どのユーザーアカウントにもSET_ANY_DEFINERまたはALLOW_NONEXISTENT_DEFINERが付与されていない場合、SET_USER_IDが付与された全てのユーザーアカウントには、SET_ANY_DEFINERおよびALLOW_NONEXISTENT_DEFINERも付与されます。SET_USER_ID権限は付与されたままになります。
    • 全てのSUPER保有者に対するSET_USER_IDの既存の割り当ては、既存のアカウントがSET_USER_IDを持っていない場合、どのユーザーアカウントもSET_ANY_DEFINER、ALLOW_NONEXISTENT_DEFINERまたはSET_USER_IDを持っていない場合にのみ、SET_ANY_DEFINERとALLOW_NONEXISTENT_DEFINERを付与するように変更されます。

    実行時に、ACLテーブルが読み取られ(FLUSH PRIVILEGES、サーバーの起動など)、SET_USER_IDの付与が取得されると、付与を受け取ったアカウント SET_USER_IDの詳細を示す警告メッセージがエラーログに追加されます。 (WL #15874)

  • TLS_AES_128_CCM_8_SHA256 暗号スイートのサポートは現在非推奨となっており、MySQLの将来のバージョンで削除される可能性があります。それをtls_ciphersuitesまたはadmin_tls_ciphersuitesシステム変数を使用して設定しようとすると、警告が返されるようになりました。デフォルトでは、どちらのシステム変数も次の暗号スイートを受け入れます:
    • TLS_AES_128_GCM_SHA256
    • TLS_AES_256_GCM_SHA384
    • TLS_CHACHA20_POLY1305_SHA256
    • TLS_AES_128_CCM_SHA256

    以前にサポートされていたいくつかの暗号は現在非推奨となっており、MySQLの将来のバージョンで削除される可能性があります。ssl_cipherまたはadmin_ssl_cipherシステム変数を使用して非推奨の暗号が指定されている場合、警告が発行されるようになりました。デフォルトでは、どちらのシステム変数も次の暗号を受け入れます:

    • ECDHE-ECDSA-AES128-GCM-SHA256
    • ECDHE-ECDSA-AES256-GCM-SHA384
    • ECDHE-RSA-AES128-GCM-SHA256
    • ECDHE-RSA-AES256-GCM-SHA384
    • ECDHE-ECDSA-CHACHA20-POLY1305
    • ECDHE-RSA-CHACHA20-POLY1305
    • ECDHE-ECDSA-AES256-CCM
    • ECDHE-ECDSA-AES128-CCM
    • DHE-RSA-AES128-GCM-SHA256
    • DHE-RSA-AES256-GCM-SHA384
    • DHE-RSA-AES256-CCM
    • DHE-RSA-AES128-CCM
    • DHE-RSA-CHACHA20-POLY1305

    (WL #15800)

ファイアウォール関連

  • MySQL Enterprise Firewallでは、ファイアウォールテーブルに保存されているデータを使用してそのメモリキャッシュを定期的に再ロードできるようになりました。以前の実装では、サーバーの起動時またはサーバー側のプラグインが再インストールされた時にのみキャッシュがリロードされました。新しいシステム変数 mysql_firewall_reload_interval_secondsは、実行時にテーブルデータをリロードするために使用するスケジュールを設定するか、リロード機能を無効にします(デフォルト)。 (WL #15696)
  • MySQL Enterprise Firewallは以前、内部のテーブル、関数、ストアドプロシージャをmysqlシステムデータベースに保存していました。新しいサーバーシステム変数 mysql_firewall_databaseにより、既存のインストールスクリプトと共に使用およびサーバー起動時に使用するカスタムスキーマを指定できるようになりました。
    新しいスクリプト uninstall_firewall.sqlにより、ファイアウォールの削除が簡単になりました。 (WL #15655)

SQL関数と演算子関連

  • STR_TO_DATE()関数は、変換される文字列に対して完全な範囲チェックを実行しなかったため、「2021-11-31」などの無効な日付を生成する文字列を渡すことができました。 (バグ #108782、バグ #34704094)

イベントの並列実行(マルチスレッドレプリカ)

  • START REPLICAステートメントのSQL_AFTER_GTIDSオプションが、マルチスレッドアプライヤーと完全に互換性を持つようになりました。
    以前は、MTAが有効になっている場合(つまり、replica_parallel_workersが1より大きく設定されている場合)に、ユーザーがこのオプションを使用しようとすると、ステートメントによって警告 ER_MTS_FEATURE_IS_NOT_SUPPORTEDが生成され、レプリカはシングルスレッドモードに切り替わりました。現在では、これは問題ではなくなり、失われたトランザクションを補う必要があるレプリカは、マルチスレッドのパフォーマンス上の利点を活用しながらそれを行えるようになりました。
    (WL #15755)

オプティマイザ関連

  • 集合演算 EXCEPTおよびINTERSECTを使用するステートメントのパフォーマンスは、そのようなステートメントに対して自動的に有効になる新しいハッシュテーブル最適化を使用して向上します。オプティマイザを以前のバージョンのMySQLで使用されていた一時テーブル最適化に戻すためには、このリリースで導入されたhash_set_operationsオプティマイザスイッチをオフに設定します。この最適化に割り当てられるメモリ量は、set_operations_buffer_sizeサーバーシステム変数の値を設定することで制御できます。バッファサイズを増やすと、これらの操作を使用する一部のステートメントの実行時間をさらに短縮できます。
    (WL #15257)

パッケージ関連

  • Windowsでは、MSIパッケージ定義ファイルがWindowsインストーラーXML(WiX)ツールセットのバージョン 4で動作するように更新されました。以前のバージョンのツールセットでは使用できなくなったことに注意してください。 (バグ #35613791)
  • バンドルされているlibeditライブラリがバージョン 20221030-3.1にアップグレードされました。 (バグ #35489173)

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

  • パフォーマンススキーマのevents_statements_summary_by_digestテーブルのSUM_ROWS_EXAMINED列で、インデックスマージの正しい行数が提供されませんでした。 (バグ #35616015)
  • このリリースでは、Performance Schema Server Telemetry Metricsサービスが追加されました。Open Telemetryプロトコルを使用してテレメトリメーター(メトリックグループ)、メトリック、およびメトリック測定値を定期的にエクスポートするために、これらの測定値をクエリする方法をプラグインとコンポーネントに提供するインターフェイス。
    以下が追加されました:

    • ステータス変数:
      • Telemetry_metrics_supported
      • Performance_schema_meter_lost
      • Performance_schema_meter_lost
    • システム変数:
      • performance_schema_max_meter_classes
      • performance_schema_max_metric_classes
    • パフォーマンススキーマテーブル:
      • setup_metrics
      • setup_meters

    以下が変更されました:

    • performance_schema_max_rwlock_classesのデフォルト値が60から100に変更され、rwlockの数の増加に適切に対応できるようになりました。

    (WL #15199)

セキュリティ関連

  • システムのcurlライブラリにリンクするのではなく、curlを含むバイナリパッケージが、curl 8.4.0を使用するようにアップグレードされました。curl バージョン 8.4.0で修正された重要な問題については、https://curl.se/docs/security.htmlで説明されています。 (バグ #35897778)
    参考: バグ #35709229も参照してください。

SQL構文関連

  • レプリケーション: このリリースでは、以前のリリースで行われた作業を継続して、MySQL レプリケーションに関連する機能で使用される用語を更新します。MySQL 8.2では、RESET MASTER(代わりにRESET BINARY LOGS AND GTIDSを使用)、SHOW MASTER STATUS(SHOW BINARY LOG STATUSを使用)、SHOW MASTER LOGS(SHOW BINARY LOGSを使用)、PURGE MASTER LOGS(PURGE BINARY LOGSを使用)を含む多くのSQLステートメントが非推奨になりました。さらに、CREATE EVENTおよびALTER EVENTのDISABLE ON SLAVEオプションは非推奨となり、DISABLE ON REPLICAに置き換えられました。
    関連する変更には以下が含まれます:

    • mysqldumpは、レプリカとイベントに関連するステートメントのダンプで使用される用語のレベルを定義するオプション --output-as-versionを追加します。これにより、現在非推奨になっている用語のみを受け入れるMySQLの以前のバージョンと互換性のあるダンプを作成できるようになります。このオプションに指定できる値は、SERVER、BEFORE_8_0_23、BEFORE_8_2_0です。
      デフォルトはSERVERです。これにより、mysqldumpはサーバーのバージョンを取得し、そのバージョンと互換性のあるコマンドを出力します。これは、サーバーのバージョンが8.2.0より前の場合には、出力にはイベントに関する非推奨のDISABLE ON SLAVE用語が含まれ、8.0.23より前の場合には、出力にはレプリカで使用されるステートメントに非推奨の用語 SLAVEおよびMASTERも使用されることを意味します。--output-as-versionがBEFORE_8_2_0に設定されている場合、SHOW CREATE EVENTは、8.2.0より前のバージョンのサーバーでイベントがどのように作成されるかを示します。このオプションがBEFORE_8_0_23に設定されている場合、ダンプではSTART SLAVEやCHANGE MASTER TOなどのレプリカの非推奨のステートメントも使用されます。
      この変更は、--events、--dump-replica、--source-data、--apply-replica-statements、--include-source-host-portの出力に影響します。
    • 新しい値 BEFORE_8_2_0が、termination_use_previousサーバーシステム変数に追加されます。変数をこの値に設定すると、サーバーはSHOW CREATE EVENTの出力にDISABLE ON REPLICAではなくDISABLE ON SLAVE(現在は非推奨)を出力します。これは、以前に既にあった効果に加えて、termination_use_previousがBEFORE_8_0_26の場合にも行われるようになりました。
    • SLAVESIDE_DISABLEDという用語は現在非推奨となっており、情報スキーマのEVENTSテーブルなどのイベントの説明では使用されなくなりました。代わりにREPLICA_SIDE_DISABLEDが表示されるようになりました。これは、termination_use_previousを使用してオーバーライドできます。
    • Com_show_master_statusシステムステータス変数の名前がCom_show_binary_log_statusに変更されました。以前の名前は非推奨ですが、下位互換性のために引き続きサポートされています。

    (WL #14190)

  • EXPLAINは、FOR SCHEMAオプションまたはFOR DATABASEオプションをサポートするようになりました。これにより、ステートメントはオプションで指定されたデータベース内で実行されたかのように分析されます。データベースが存在し、ユーザーがデータベースにアクセスするために必要な権限を持っている必要があります。
    構文は以下のとおりです。stmtは説明可能なステートメントです:

    EXPLAIN [options] FOR SCHEMA schema_name stmt

    これにより、schema_nameが現在のデータベースであるかのようにstmtが実行されます。
    このオプションはFOR CONNECTIONと互換性がありません。この2つを同じEXPLAINステートメント内で一緒に使用することはできません。
    (WL #15785)

追加・変更された機能

  • 互換性のない変更: バンドルされているlifido2ライブラリをlifido2 v1.13.0にアップグレードしました。このlibfido2のバージョンにはOpenSSL 1.1.1以降が必要です。つまり、authentication_fido認証プラグインおよびauthentication_fido_client認証プラグインは、Enterprise Linux 6および7、Solaris 11、SLES 12のプラットフォームでは利用できなくなりました。(バグ #35685515)
  • 重要な変更: OpenSSLライブラリがバンドルされているプラットフォームの場合、MySQL Server用のリンクされたOpenSSLライブラリがバージョン 3.0.10に更新されました。OpenSSL バージョン 3.0.10で修正された問題については、https://www.openssl.org/news/cl30.txtで説明されています。 (バグ #35702863、バグ #35732474)
  • 重要な変更: Debian 12、Fedora 39、macOS 14、Ubuntu 23.10のサポートが追加されました。macOS の場合、macOS 13のバイナリがmacOS 14でテストされました。
  • mysqldumpの場合: 生成されたダンプファイル内のテーブルビューをスキップする --ignore-viewsオプションを追加しました。
    (バグ #30284943、WL #15662)
  • mysqldumpの場合: MySQLサーバーへの接続または再接続後にSQLステートメントを実行できるようにする --init-commandオプションおよび--init-command-addオプションを追加しました。
    (バグ #27411227、WL #15662)
  • mysqlの場合: MySQLサーバーへの接続または再接続後に実行する追加のSQLステートメントを追加する --init-command-addオプションを追加しました。これは、--init-commandオプションに似ています。
    (バグ #27411227、WL #15662)
  • ログインパスの処理を無効にする新しいコマンドラインオプション --no-login-pathsが追加されました。--login-pathオプションを持つ各MySQLクライアントに追加されました。 (WL #12429)

主なバグ修正

  • InnoDB: システムスキーマ内のMySQLテーブルに8.0.29より前に追加されたINSTANT ADDカラムがあり(そのバージョンでは許可されていない)、MySQLが8.0.29以降のバージョンにアップグレードされた後、これらのテーブルにDMLを実行すると、サーバーが予期せず終了する可能性があります。
    (バグ #35625510)
  • InnoDB: innodb_doublewrite関連のエラーメッセージが改善されました。 (バグ #35482724)
  • InnoDB: FTSパーサープラグインによる単一文字トークンの処理を修正しました。
    (バグ #35432973)
  • InnoDB: フラッシュ処理が改善され、コード全体でフラッシュが正しく均一に処理されるようになりました。 (バグ #35385801)
  • InnoDB: innodb_redo_log_capacity_updateがログ容量を変更し、次のガバナースレッドの反復が終了するのを待機している間、そのガバナースレッドが既に並列実行されている場合、ガバナースレッドは常にその変更を認識するとは限りません。この場合のlog_files_wait_until_next_governor_iterationルーチンは、現在の反復が終了するのを待つだけでした。現在は、完全な反復が完了するまで待機します。 (バグ #35145188)
  • InnoDB: インデックス作成の試行が「kill query」によって中断された場合、別のスレッドがテーブルを参照した場合、InnoDBは作成中のインデックスを常に削除しようとするわけではありません。また、他の参照が統計バックグラウンドスレッドによって保持されていた時。これによりアサーションエラーが発生します。 (バグ #34823462)
    参考: この問題は、バグ #33399379のリグレッションです。
  • InnoDB: デバッグモードを有効にすると、Bツリー検証が大きなテーブルの最大待機時間を超える可能性がありました。 (バグ #34411425)
  • InnoDB: ALTER TABLE EXCHANGE PARTITIONSステートメントに起因する潜在的なトランザクションロールバックの問題を修正しました。 (バグ #110869、バグ #35352168)
    参考: この問題は、バグ #33700835のリグレッションです。
  • InnoDB: 複数の列にまたがるフルテキストインデックスを作成すると、インデックスの作成が"ERROR 1062 (23000): Duplicate entry 'NULL-NULL'."のようなエラーで失敗することがありました。 (バグ #109242、バグ #33542939、バグ #34846823)
  • InnoDB: エンジンステータスログの最後に検出されたデッドロックセクションには、スレッドとクエリの情報を合わせた1024文字しか表示されませんでした。印刷されるクエリ文字列の制限を削除して修正しました。 (バグ #80927、バグ #23036096)
  • レプリケーション: バイナリログ圧縮で使用されるメモリは計測されていませんでした。 (バグ #35290223)
  • レプリケーション: サーバーは、binlog_transaction_compression_level_zstd サーバーシステム変数の設定を尊重しませんでした。 (バグ #34833913)
  • レプリケーション: performance_schema.binary_log_transaction_compression_stats テーブルをクエリすると、リレーログの最初と最後のトランザクションタイムスタンプに誤った値が表示されました。これは、my_getsystime()を直接使用してbinary_log_transaction_compression_statsのfirst_transaction_timestamp列とlast_transaction_timestamp列を設定したことが原因でした。この関数は、タイムスタンプ値に10を乗算した値を返すため、列値が不正確になります。my_getsystime()によって返される値を伝播する前に10で除算することで、この問題を修正しました。 (バグ #32022794)
  • レプリケーション: 大規模なトランザクション(4GBを超える)とMASTER_HEARTBEAT_PERIODの値が非常に小さい場合、バイナリログのローテーションが完了する前にハートビートイベントが送信され、レプリカに影響を与えるRESET REPLICAおよび同様のステートメントがハングする可能性がありました。 (バグ #111149、バグ #35431274)
  • レプリケーション: トランザクション間の依存関係と競合を検出するために、MySQLレプリケーションは、binlog_formatがROWで、transaction_write_set_extractionが有効である(どちらもデフォルト)場合は常に、NOT NULLであるキー(定義上のプライマリキー、および、NOT NULLである一意キーと外部キー) から抽出された書き込みセットを使用します。列値の先頭部分のみを使用する複数列の一意キーの場合、書き込みセットが適切に生成されず、誤った重複キーエラーが発生することがありました。これは、そのような場合に、キー自体が列のプレフィックスのみを参照しているにもかかわらず、参照されたキー列の値全体が書き込みセットに追加されるという事実によるものでした。 (バグ #111027、バグ #35404584)
  • グループレプリケーション: 内部関数 call_gr_incoming_connection_cb()で見つかったメモリリークを削除しました。 (バグ #111529、バグ #35526671)
  • MySQL 8.0.23で行われた変更により、以前はGROUP_CONCAT()がNULLを返していた場合がありましたが、今後はNULLを返さなくなりました。 (バグ #35730982)
    参考: この問題は、バグ #32053547のリグレッションです。
  • 一部のサブクエリ述語のアンチ結合への変換が正しく処理されませんでした。 (バグ #35710378)
    参考: この問題は、バグ #35184353のリグレッションです。
  • クエリのWHERE条件に一致する行がない場合、(PREPAREを使用して)準備されたクエリの結果は、同じクエリを直接実行した場合の結果と異なります。 (バグ #35689804)
  • コマンドラインから設定オプションをtelemetry_clientに渡すことができませんでした。
    また、telemetry_client設定オプションであるtraceとhelpの名前がotel-traceとotel-helpに変更されました。 (バグ #35616866)
  • セミジョインの内部式内のサブクエリにより、それを含むクエリがInternal error: Key not foundで拒否されました。 (バグ #35535934)
    参考: バグ #31401468、バグ #34453026。
  • strings/ctype-ucs2.ccのアサーションを削除しました。 (バグ #35512282)
  • 相関スカラーサブクエリを派生テーブルとの結合に変換すると、冗長なANY_VALUE()ラッパーがGROUP BY列に追加されました。 (バグ #35507109)
  • INTERSECTを使用する一部のクエリは、常に正しく処理されるとは限りませんでした。 (バグ #35504625)
    参考: バグ #35362424。
  • QUOTE()関数が予期したNULLではなくバイナリデータを返す場合がありました。 (バグ #35499232)
  • サーバーは、サブクエリから派生への変換を相関サブクエリに常に正しく適用するとは限りませんでした。 (バグ #35497723)
  • Fedoraでは、非クラスタMySQLパッケージを依存関係として参照しないように、MySQL Cluster 8.1.0パッケージが修正されました。 (バグ #35495002)
  • AddressSanitizerが有効になっている(-WITH_ASAN=trueでコンパイルされている)場合、対話モードのMySQLクライアントが最初の文字としてドル記号を検出すると、ASANがエラーを起こし、MySQLが予期せず停止しました。 (バグ #35493484)
    参考: この問題は、バグ #35303407のリグレッションです。
  • REPEAT()関数に関して、count引数が定数であると判断された場合、解決中にその引数を評価できますが、キャッシュされた値を導入するクエリリライトにより、引数が解決時と実行時に異なる評価を受ける可能性がありました。
    値に符号付き整数ではなく符号なし整数を使用し、RPAD()およびLPAD()の場合と同じ方法でREPEAT()のカウント評価を実行することによって、これを修正します。 (バグ #35489153)
  • 以前は、出力パフォーマンスが低く、サーバーのワークロードが高く、audit_log_strategyシステム変数の書き込み戦略がASYNCHRONOUSまたはPERFORMANCEである場合に、audit_log_rotate()を手動で実行すると、関数が応答しないように見えることがありました。 (バグ #35397216)
  • QUOTE()関数は、以前にnull非許容として解決されていたにもかかわらず、NULLを返す場合がありました。 (バグ #35381715)
    参考: バグ #35145246、バグ #35195181。
  • sql_modeにPAD_CHAR_TO_FULL_LENGTHが含まれている場合、GRANT EXECUTE ON PROCEDUREステートメントは最初に発行された後に機能しましたが、FLUSH PRIVILEGESまたはMySQLサーバーの再起動後は、GRANTステートメントで指定されたユーザーはプロシージャを実行できなくなりました。 (バグ #35380295)
  • GRANTステートメント内のデータベース名パターンでワイルドカード文字'_'をエスケープするためにバックスラッシュ文字が使用された場合、SHOW DATABASESクエリおよびUSE database_nameクエリは予期した結果を返しませんでした。 (バグ #35338567)
  • 最初の呼び出し後に正しく実行されなかったストアドプログラムに対するMySQL 8.0.30の以前の修正では、それがSETステートメントを含む場合はカバーされていませんでした。
    (バグ #35328028)
    参考: この問題は、バグ #33754993のリグレッションです。
  • データディクショナリおよびストアドプロシージャコード内の多数の不適切な参照を修正または削除しました。 (バグ #35325895、バグ #35325909、バグ #35325920、バグ #35325935)
  • --comments=onを指定したMySQLコマンドラインクライアントは、MySQLビルトインコマンドの前に複数行のコメントを適切に処理できませんでした。 (バグ #35290350)
  • 内部クラス Item_typecast_yearには、独自のprint()メンバー関数オーバーライドがありませんでした。これは、ビュー、テーブル、またはその両方に表示される定義の一部が不正な形式である可能性があることを意味しました。 (バグ #35244286)
  • 条件内の列を置換する必要がある派生条件プッシュダウンを含むクエリの場合、置換項目がROLLUPでラップされているのに、一致する項目がラップされていない場合、一致する項目が存在することがわかっていても、一致する項目が見つかりませんでした。 (バグ #35211828)
    参考: この問題は、バグ #33349994のリグレッションです。
  • ストアド関数の問題は、列間で値をコピーする際に使用される内部関数を改善するために以前に行われた作業からのリグレッションであることが判明しました。 (バグ #35150382)
    参考: この問題は、バグ #32742537のリグレッションです。
  • 派生テーブルにプッシュダウンする必要がある条件に、1つの外部参照フィールドと、クエリブロックに対してローカルな別のフィールドがある場合、参照される項目の一貫した依存関係情報をチェックするアサーションが適切に保持されませんでした。これは、式内のフィールドに関連する情報を収集した後、式内の次のフィールドの情報を収集する前に依存関係とコンテキストがクリアされなかったためです。
    式内の新しいフィールドを調べる前に依存関係とコンテキスト情報をクリアすることによって、この問題を修正します。 (バグ #35102220)
  • コマーシャルビルドにバンドルされているKerberosライブラリをバージョン 1.21.2に更新しました。 (バグ #35001935)
  • ハッシュ結合のプローブ入力が空の場合、結果が空になることが既にわかっているため、ビルド入力を読み取る必要はありません。したがって、結合が左結合またはアンチ結合である場合、最初にプローブ入力から読み取ります。これらの結合タイプでは、ビルド入力が空であってもプローブ入力を読み取る必要がありますが、その逆は当てはまりません。 (バグ #34940000)
  • トリガーを使用したテーブルへの一部のインサートは、常に正しく処理されるとは限りませんでした。 (バグ #34920120)
    参考: バグ #35178672、バグ #35195079。
  • FORMAT = JSONを使用する一部のDESCRIBEステートメントは常に正しく処理されるわけではなく、デバッグビルドでアサーションが発生する場合がありました。 (バグ #34909766)
  • 複数の共通テーブル式を使用する一部の複雑なクエリは、常に正しく処理されるとは限りませんでした。 (バグ #34900334)
    参考: この問題は、バグ #34377854のリグレッションです。
  • ウィンドウ関数を使用した一部のクエリが正しくプッシュダウンされませんでした。 (バグ #34778435)
  • SELECT DISTINCTクエリの行推定値は、DISTINCT修飾子のない同一のSELECTの場合と同じでした。これによりコスト見積もりが歪められ、非効率的なクエリプランの選択につながる可能性がありました。 (バグ #34762651)
  • 結合の最適化中に発生する可能性のある予期しない状況を処理しました。 (バグ #31401468)
    参考: バグ #34350945。
  • 1つ以上の共通テーブル式を含むプリペアドステートメントを実行すると、デバッグビルドでアサーションが発生しました。 (バグ #111955、バグ #35671595)
  • 特定の状況下で、パフォーマンススキーマの初期化中にメモリ不足状態が発生した場合、クリーンアッププロセス中にサーバーが予期せず終了しました。 (バグ #111860、バグ #35635853)
  • Enterprise Linuxの場合、krb5-develビルド要件がコマーシャルビルドから全てのビルドに変更されました。 (バグ #111596、バグ #35546449)
  • EXPLAIN FORMAT=TREEはハッシュ結合でサブクエリを失いました。
    (バグ #111564、バグ #35537921)
  • パーティショニング関数エラーの後に予期しないサーバーの終了が発生することがありました。 (バグ #111443、バグ #35507164)
  • 条件を派生テーブルにプッシュする時は、その条件のクローンを作成します。そして、基になるフィールドがビュー参照(つまり、マージされた派生テーブルのフィールド)である場合、そのビュー参照を取り除き、それが参照する式のクローンを作成します。基になる式が外部結合の内側にあるテーブルの定数式である場合、NULL値を生成する必要があるため、それを通常の定数として扱うことができません。ビュー参照を取り除くと、この情報は失われ、誤った結果が生じます。
    このような場合の条件プッシュダウンを回避することによって、この問題を修正します。 (バグ #111355、バグ #35634714)
  • 孤立したSQLオブジェクトをチェックする時に、CREATE ROLEおよびDROP ROLEステートメントが正しく処理されませんでした。 (バグ #111303、バグ #35471453)
  • BINARY列と同じサイズのVARBINARY列の結合(両方の列にBINARY列のサイズと等しいサイズの一致する値がある)では、一致する行は生成されませんでした。 (バグ #111290、バグ #35467555)
  • 相関スカラーサブクエリの変換をサポートするためにMySQL 8.0.24で行われた作業では処理されないケースが見つかりました。スカラーサブクエリが相互に関連付けられているだけでなくグループ化されている場合、変換では、group byに追加される内部式(列)によってパーティション分割された結果セットの各パーティションについて、そのように構築された派生テーブルに最大1行しか存在しないことを確認する必要があります。 (バグ #111189、バグ #35473657)
  • ロールが付与されていないユーザーの場合、SET ROLEステートメントによって、MySQLは、進行中のセッションが終了して新しいセッションが開始されるまで、そのユーザーアカウントに直接関連付けられた全ての権限を忘れてしまいます。例えば、以前は成功したSHOW TABLESステートメントは、ユーザーの権限が認識されなくなったため、SET ROLE ALL、SET ROLE NONE、またはSET ROLE DEFAULTの後に拒否されました。 (バグ #110997、バグ #35386565)
  • Clone_Snapshot::extend_and_flush_files()は常にOS_CLONE_DATA_FILEタイプのファイルを作成します。この関数は、flush_redo()を使用して、REDOログファイルを処理します。REDOログファイルのタイプはOS_CLONE_LOG_FILEである必要があり、os_file_set_size()でエラーが発生する場合があります。
    この問題は、新しいファイルの作成時にタイプが正しく設定されていることを確認することによって修正されています。
    (バグ #110569、バグ #35240055)
  • 自動コミットがOFFに設定されている場合、MySQLサーバーは --initializeまたは --initialize-insecureを使用して正しく初期化されませんでした。sysスキーマが存在しませんでした。
    このリリースの時点では、このシナリオではautocommitのデフォルト以外の値は無視されます。 (バグ #110535、バグ #35254025)
  • records_in_rangeは、挿入操作のために過剰な数のディスク読み取りを実行しました。
    (バグ #109595、バグ #34976138)
  • 間違ったインデックスを選択したために、下限ヒューリスティックはORDER BY DESCではうまく機能しませんでした。 (バグ #107626、バグ #34306497)

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


MySQL Editions

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