2023.07.28

MySQL

MySQL Community Server 8.0.34 GA版(リリース日:2023年7月18日)

アカウント管理関連

  • 新しいパスワード検証システム変数により、ユーザーが自分のMySQLアカウントのパスワードを置き換えようとする時に変更する必要がある最小文字数の設定と強制が可能になりました。この新しい検証設定は、現在のパスワードの合計文字数に対する割合です。例えば、validate_password.changed_characters_percentageの値が50の場合、置換アカウントパスワードの文字の少なくとも半分が現在のパスワードに存在してはなりません。そうでないと、パスワードは拒否されます。
    この新機能は、DBAがパスワード管理をより完全に制御できるようにする機能の1つです。(WL #15751)

監査ログ関連

  • MySQL 8.0.33では、audit_logプラグインにより、JSONフィルターテーブルの保存に使用するデータベースを選択するためのサポートが追加されました。プラグインのインストールスクリプトを実行する時に、デフォルトのシステムデータベースであるmysqlの代替を指定できるようになりました。コマンドラインで、audit_log_databaseサーバーシステム変数(または、-D database_name)を代替データベース名とともに使用します。例えば:
    $> mysql -u root -D database_name -p < audit_log_filter_linux_install.sql
    (バグ #35252268)
  • MySQL Enterprise Auditでは、スケジューラコンポーネントを使用して、メモリ内キャッシュをフラッシュする繰り返しタスクを設定および実行することがサポートされるようになりました。(WL #15567)

バイナリロギング

  • 開発者がMySQLサーバーのバイナリログにアクセスできるようにするいくつかの関数(mysql_binlog_open(), mysql_binlog_fetch(), and mysql_binlog_close())がlibmysqlclient.so共有ライブラリに追加されました。
    (バグ #110658、バグ #35282154)

C API関連

  • 呼び出し関数では、net->vioがnullの場合、lenは0に初期化され、変更されません。この修正では、vioを逆参照する前にnetのチェックが追加されました。
    (バグ #30809590)
  • 非同期クライアントの変数が特定のコードパスで初期化されませんでした。これは常に変数を初期化することで修正されます。
    (バグ #30809590)

コンパイル関連

  • Microsoft Windows:Windowsについて、MSVC_CPPCHECKサポートが改善されました。"maintainer"モードと同様のMSVC警告を確認します。例えば、全てのサードパーティの設定が完了した後に確認します。(バグ #35283401)
    参考:バグ #34828882も参照してください。
  • Microsoft Windows:Windowsビルドについて、WIN_DEBUG_NO_INLINE=1のサポートが改善されました。使用量がライブラリ制限の65535オブジェクトを超える可能性があります。(バグ #35259704)
  • バンドルされているrobin-hood-hashingをv3.8.1からv3.11.5にアップグレードしました。(バグ #35448980)
  • extra/libcbor/doc/source/requirements.txtがGitHubの偽のプルリクエストに影響を与えたため、未使用のextra/libcbor/doc/ディレクトリを削除しました。(バグ #35433370)
  • icu-data-filesパッケージにバンドルされているICUファイルをバージョン 69.1からバージョン 73に更新しました。(バグ #35353708)
  • ソースツリーにバンドルされているZSTDソースは、1.5.0からZSTD 1.5.5にアップグレードされました。(バグ #35353698)
  • TRASHマクロを使用して、内部MEM_ROOTクラスメモリをガベージで初期化し、MEM_ROOTから割り当てられた初期化メモリの読み取りによって発生するバグを再現しやすくします。(バグ #35277644)
  • スタックの方向を設定時ではなく実行時に決定するようになりました。(バグ #35181008)
  • -O1 -fno-inlineをサニタイザービルドに追加するOPTIMIZE_SANITIZER_BUILDS CMakeオプションを追加しました。デフォルトはオンです。(バグ #35158758)
  • Bisonの最小バージョン要件がv2.1からv3.0.4に変更されました。macOSの場合、Homebrewなどのパッケージマネージャーを介してBisonをインストールする必要がある場合があります。(バグ #35154645、バグ #35191333)
  • MySQLは、非ASCII出力の問題を回避するために、readelfを実行する時に環境にLANG=Cを設定するようになりました。
    (バグ #111190、バグ #35442825)
  • macOSでは、rapidjsonがHomebrew経由でインストールされた場合、MySQLはコンパイルされません。回避策は、brew unlink rapidjsonでした。(バグ #110736、バグ #35311140)
    参考:この問題はバグ #35006191のリグレッションです。
  • MySQLは、-DWITH_ZLIB=systemではビルドされません。それは、システムのzlibライブラリが見つかったにもかかわらず、見つからないことについて不満を表すでしょう。(バグ #110727、バグ #110745、バグ #35307674、バグ #35312227)

非推奨と削除関連

  • 重要な変更: MySQLは、mysqldumpやMySQL Shell ユーティリティを含む、同じ機能または追加の機能でデータベースのダンプとバックアップを実行する他の手段を提供しているため、mysqlpumpクライアントユーティリティプログラムは不要になり、現在は非推奨です。このプログラムを呼び出すと警告が生成されるようになりました。mysqlpumpはMySQLの将来のバージョンで削除される可能性があることに留意し、これに依存するアプリケーションを前述したような別のソリューションに移動する必要があります。 (WL #15652)
  • レプリケーション: sync_relay_log_infoサーバーシステム変数はこのリリースで非推奨になり、この変数または同等の起動オプション --sync-relay-log-infoを取得または設定すると警告が発生するようになりました。
    この変数はMySQLの将来のバージョンで削除される予定です。これを利用するアプリケーションは、それが発生する前にこれに依存しないように書き直す必要があります。 (バグ #35367005、WL #13968)
  • レプリケーション: binlog_formatサーバーシステム変数は現在非推奨となっており、MySQLの将来のバージョンで削除される可能性があります。この変数に関連付けられた機能、つまりバイナリログ形式を変更する機能も非推奨になります。
    この変更の意味するところは、binlog_formatが削除されると、すでにMySQL 8.0のデフォルトとなっている行ベースのバイナリロギングのみがMySQLサーバーでサポートされることになります。この理由から、新しいインストールでは行ベースのバイナリロギングのみを使用する必要があり、ステートメントベースまたは混合ログ形式を使用している既存のインストールは行ベース形式に移行する必要があります。
    ステートメントベースのロギングのコンテキストでのみ役に立っているシステム変数 log_bin_trust_function_creatorsおよびlog_statements_unsafe_for_binlogも現在は非推奨となっており、MySQLの将来のリリースで削除される可能性があります。
    先ほど述べた変数の値を設定または選択すると、警告が表示されるようになりました。(WL #13966、WL #15669)
  • グループレプリケーション: group_replication_recovery_complete_atサーバーシステム変数は非推奨になり、これを設定すると警告が生成されます。MySQLの将来のリリースで削除される予定です。(WL #15460)
  • mysql_native_password認証プラグインは現在非推奨となっており、MySQLの将来のバージョンで削除される可能性があります。CREATE USER、ALTER USER、およびSET PASSWORD操作では、アカウントが認証方法としてmysql_native_passwordを使用して認証を試行した場合に、サーバーエラーログに非推奨の警告が挿入されるようになりました。(バグ #35336317)
  • 以前は、ルールベースのフィルタリングに必要な付随の監査テーブルと関数が無しでaudit_logプラグインがインストールされている場合に、プラグインは従来のフィルタリングモードで動作していました。現在、従来のフィルタリングモードは非推奨になりました。従来の監査ログフィルタリングシステム変数に対して、新しい非推奨の警告が生成されます。これらの非推奨の変数は読み取り専用または動的です。
    (読み取り専用) audit_log_policyは、値がALL(デフォルト値)ではない場合、サーバーの起動中にMySQLサーバーのエラーログに警告メッセージを書き込むようになりました。
    (動的)audit_log_include_accounts、audit_log_exclude_accounts、audit_log_statement_policy、およびaudit_log_connection_policy。動的変数は、使用状況に基づいて警告メッセージを出力します。

    • MySQLサーバーの起動中にaudit_log_include_accountsまたはaudit_log_exclude_accountsにNULL以外の値を渡すと、警告メッセージがサーバーエラーログに書き込まれるようになりました。
    • MySQLサーバーの起動中にaudit_log_statement_policyまたはaudit_log_connection_policyにデフォルト以外の値を渡すと、警告メッセージがサーバーエラーログに書き込まれるようになりました。ALLは両方の変数のデフォルト値です。
    • MySQLクライアントセッション中にSET構文を使用して既存の値を変更すると、警告メッセージがクライアントログに書き込まれるようになりました。
    • MySQLクライアントセッション中にSET PERSIST構文を使用して変数を永続化すると、警告メッセージがクライアントログに書き込まれるようになりました。

    (WL #11248)

  • MySQLでは、システム変数とクライアントオプションを使用して、サーバー側とクライアント側でFIPSモードを制御できます。アプリケーションプログラムは、mysql_options()のMYSQL_OPT_SSL_FIPS_MODEオプションを使用して、クライアントでFIPSモードを有効にすることができます。あるいは、現在のサーバー側のシステム変数とクライアント側のオプションを使用するのではなく、OpenSSL設定ファイルを介して直接FIPSモードを処理することもできます。MySQLがOpenSSL 3.0を使用してコンパイルされ、OpenSSLライブラリとFIPSオブジェクトモジュールが実行時に使用できる場合、サーバーはOpenSSL設定ファイルを読み取り、FIPSプロバイダーが設定されている場合はその使用設定を尊重します。OpenSSL 3.0は、FIPSでの使用が認定されています。
    OpenSSLの代替を優先するために、ssl_fips_modeサーバーシステム変数、--ssl-fips-modeクライアントオプション、およびMYSQL_OPT_SSL_FIPS_MODEオプションは非推奨になり、MySQLの将来のバージョンで削除される可能性があります。アプリケーションがMYSQL_OPT_SSL_FIPS_MODEオプションを使用する場合、またはクライアントユーザーがコマンドライン、オプションファイル、またはその両方で--ssl-fips-modeオプションを指定する場合、非推奨の警告が標準エラー出力に出力されます。
    非推奨になる前は、ssl_fips_modeサーバー側システム変数は動的に設定可能でした。これは読み取り専用変数になりました(SET PERSIST_ONLYは受け入れられますが、SET PERSISTまたはSET GLOBALは受け入れられません)。コマンドラインまたはmysqld-auto.cnfオプションファイル(SET PERSIST_ONLYを使用)で指定すると、非推奨の警告がサーバーエラーログに出力されます。(WL #15631)
  • mysql_ssl_rsa_setupプログラムは当初、OpenSSLがシステムにインストールされている場合に、コミュニティユーザーが証明書を手動で生成するための簡単な方法を提供していました。MySQL Community EditionではyaSSLをSSLライブラリとして使用することがサポートされなくなり、ソースディストリビューションにはyaSSLが含まれなくなったため、mysql_ssl_rsa_setupは非推奨になりました。代わりに、MySQLサーバーを使用して、欠落しているSSLおよびRSAファイルを起動時に自動的に生成します。(WL #15668)
  • keyring_fileプラグインとkeyring_encrypted_fileプラグインは非推奨になりました。これらのキーリングプラグインは、component_keyring_fileコンポーネントとcomponent_keyring_encrypted_fileコンポーネントに置き換えられます。(WL #15659)
  • 以前は、MySQLサーバーは、その中に含まれるMySQLバージョン番号の後に空白が続くかどうかに関係なく、バージョン固有のコメントを処理していました。例えば、コメント /*!80034KEY_BLOCK_SIZE=1024*/と/*!80034 KEY_BLOCK_SIZE=1024*/は同じように処理されました。このリリース以降、そのようなコメント内のバージョン番号に続く次の文字が空白文字でもコメントの終わりでもない場合、サーバーは警告を発行します: バージョン番号の直後にバージョンコメントを開始することは非推奨であり、将来のリリースで動作が変更される可能性があります。バージョン番号の後に空白文字を挿入してください。
    MySQLの将来のバージョンでは、バージョン固有のコメントに対する空白要件が厳密に適用されることを想定する必要があります。
    (WL #15686)
  • MySQLクライアントライブラリは現在、接続がダウンしていることが判明し、アプリケーションが実行されたステートメントをサーバーに送信しようとした場合に、サーバーへの自動再接続の実行をサポートしています。現在、この機能は非推奨となっており、MySQLの将来のリリースで削除される可能性があります。
    関連するMYSQL_OPT_RECONNECTオプションは引き続き使用できますが、これも非推奨になります。C API関数 mysql_get_option()およびmysql_options()は、アプリケーションが MYSQL_OPT_RECONNECTを指定した場合に、非推奨の警告を標準エラー出力に書き込むようになりました。(WL #15766)

IPv6サポート

  • NDB Cluster: ホスト上でIPv6サポートが有効になっていない場合、クラスター内のノードがIPv6アドレスを使用していない時でも、NDBは起動しませんでした。(バグ #106485、バグ #33324817、バグ #33870642、WL #15561)

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

  • パフォーマンススキーマ clone_statusテーブルのgtid_executed列に使用される型がVARCHAR(4096)からLONGTEXTに変更されました。(バグ #109171、バグ #34828542)

SQL構文関連

  • CURRENT_USER()を、CREATE TABLEおよびALTER TABLE ... ADD COLUMNステートメントのVARCHAR列およびTEXT列のデフォルト値として使用できるようになりました。
    関数 SESSION_USER()、USER()、およびSYSTEM_USER()も、前述の全てのケースでサポートされます。例えば、次の一連のステートメントはここで示しているものと同様に機能しますが、正確な出力は環境に応じて異なります:

    mysql> SELECT CURRENT_USER();
    +-------------------+
    | CURRENT_USER() |
    +-------------------+
    | sakila@localhost |
    +-------------------+
    1 row in set (0.00 sec)

    mysql> CREATE TABLE t (
    > c1 VARCHAR(288) DEFAULT (USER()),
    > c2 VARCHAR(288) DEFAULT (CURRENT_USER()),
    > c3 VARCHAR(288) DEFAULT (SESSION_USER()),
    > c4 VARCHAR(288) DEFAULT (SYSTEM_USER())
    > );
    Query OK, 0 rows affected (0.04 sec)

    mysql> INSERT INTO t VALUES ROW();
    Query OK, 1 row affected (0.01 sec)

    mysql> TABLE t;
    +-------------------+-------------------+-------------------+-------------------+
    | c1 | c2 | c3 | c4 |
    +-------------------+-------------------+-------------------+-------------------+
    | sakila@localhost | sakila@localhost | sakila@localhost | sakila@localhost |
    +-------------------+-------------------+-------------------+-------------------+
    1 row in set (0.00 sec)

    この方法で使用される場合、これらの関数はSHOW CREATE TABLEおよびSHOW COLUMNSの出力にも含まれ、該当する場合は情報スキーマのCOLUMNSテーブルのCOLUMN_DEFAULT列で参照されます。
    可能な最大長の値をそのような列に格納できるようにする必要がある場合は、列に少なくとも288文字を収容できることを確認する必要があります(ユーザー名は255、ホスト名は32、さらに区切り文字 @は1)。このため、これらの関数のいずれかをCHAR列のデフォルトとして使用することは可能ですが、エラーや値の切り捨てのリスクがあるため、お勧めできません。(バグ #17809、バグ #11745618)

追加・変更された機能

  • 重要な変更: OpenSSLライブラリがバンドルされているプラットフォームの場合、MySQL Server用のリンクされたOpenSSLライブラリがOpenSSL 1.1.1からOpenSSL 3.0に更新されました。現在の正確なバージョンは 3.0.9です。1.1.1から3.0への変更の詳細については、https://www.openssl.org/docs/man3.0/man7/migration_guide.htmlを参照してください。(バグ #35475140、WL #15614)
  • システムのcurlライブラリにリンクするのではなくcurlを含むバイナリパッケージは、curl 8.1.1を使用するようにアップグレードされました。(バグ #35329529)

主なバグ修正

  • 重要な変更: MySQL 8.0.28で導入された時、connection_memory_chunk_sizeサーバーシステム変数のデフォルト値は、誤って8912に設定されました。この修正により、デフォルトが、当初意図されていた値である8192に変更されます。(バグ #35218020)
  • NDB Cluster: 以前の問題の修正により、Unicode 9.0照合が使用されており、照合ハッシュメソッドが2つの等しくない文字列に対して同一のハッシュキーを計算した場合、等しくない文字列値が等しいものとして比較される可能性がわずかにありました。(バグ #35168702)
    参考: バグ #27522732も参照してください。この問題は、バグ #30884622のリグレッションです。
  • InnoDB: 多数のシステムスレッドのパージによって発生する可能性のある混雑が修正されました。(バグ #35289390、バグ #110685)
  • InnoDB: ddl::Aligned_bufferは、カーネルメモリ管理ではなく、標準のメモリアロケータを使用するようになりました。(バグ #35194732、バグ #110411)
  • InnoDB: MySQL 5.7からMySQL 8.0.32へのアップグレードは、非推奨の設定パラメータ innodb_log_file_sizeまたはinnodb_log_files_in_groupが原因で失敗する可能性があります。回避策は、--innodb-redo-log-capacity=206158430208を指定してMySQL 8.0.32を起動することです。(バグ #35155280)
  • InnoDB: REDOログ内のエントリを集約するためのルールが修正されました。(バグ #34752625、バグ #108944)
  • InnoDB: テーブルスペースの削除とバッファプールによるいくつかのエラーが修正されました。(バグ #34330475、バグ #107689)
  • パッケージング; グループレプリケーション: Generic Linuxパッケージのグループレプリケーションプラグインは、互換性のあるバージョンのtirpcがない一部のプラットフォームではロードされませんでした。(バグ #35323208)
  • レプリケーション: session_track_gtidsの変更が常に正しく伝播されるわけではありません。(バグ #35401212)
  • レプリケーション: 設計上、全てのDDL操作(バイナリログのパージなどのバイナリログ操作を含む)はBACKUP_LOCKオブジェクトの共有ロックを取得します。これにより、バックアップとDDL操作の同時実行を防ぐことができます。バイナリログ操作の場合、BACKUP_LOCKにロックが存在するかどうかは確認しましたが、そのようなロックの種類は確認しませんでした。これは、BACKUP_LOCKオブジェクトに排他ロックが保持されている場合、つまりバックアップが実際に進行中の場合にのみバイナリログ操作が防止される必要があり、バイナリログをパージする時にバックアップが防止される必要があるため、問題が発生しました。
    このような場合、BACKUP_LOCKオブジェクトに保持されているロックをチェックする代わりに、バイナリログをパージする時にBACKUP_LOCKの共有ロックを取得します。(バグ #35342521)
  • レプリケーション: 1つを除く全てのケースで、イベントの読み取り中にmysqlbinlogがエラーに遭遇すると、エラーメッセージが書き込まれ、ゼロ以外の終了コードが返されました。例外はアクティブなバイナリログファイル(またはformat_description_log_eventにLOG_EVENT_BINLOG_IN_USE_Fフラグが設定されているバイナリログ)です。この場合、メッセージは書き込まれず、終了コード 0が返されるため、エラーが隠蔽されます。
    現在、mysqlbinlogは切り捨てられたイベントに関連するエラーのみを抑制し、抑制する場合はエラーメッセージではなくコメントを出力します。この修正により、--force-if-openオプションのヘルプテキストも改善されます。(バグ #35083373)
  • レプリケーション: 圧縮バイナリログイベントの処理が改善されました。(バグ #33666652)
  • レプリケーション: それぞれが1GiBより小さいイベントで構成されるトランザクションは、合計サイズが1GiBより大きく、圧縮によって1GiBより小さくならない場合でも、1GiBより大きい1つのイベントとしてバイナリログに書き込まれます。これにより、バイナリログが使用できなくなりました。実際には、サーバーもmysqlbinlogなどの他のツールも読み取ることができなかったため、それは破損していました。
    現在は、圧縮されたデータが1GiB を超えると、圧縮を行わずにトランザクションを処理するようになります。(バグ #33588473)
  • グループレプリケーション: グループレプリケーション設定では、アプライヤーチャネル以外のトランザクションのソースが存在する場合、次の一連のイベントが発生する可能性がありました:
      1. ローカルで適用されているいくつかのトランザクションは既に認証されているため、チケット(これをチケット 2と呼ぶ)に関連付けられていましたが、まだコミットされていませんでした。これらはローカルトランザクションまたは非ローカルトランザクションである可能性があります。
      2. ビューはチケット 3で作成され、チケット 2からのトランザクションを待機する必要があります。
      3. ビュー変更(VC1)はGRアプライヤーチャネルアプライヤーに入り、チケットが3に変更されるのを待ちました。
      4. チケット 2からのトランザクションがまだ完了している間に、別のグループ変更と別のビュー変更(VC2)が発生しました。
  1. これにより、次の問題が発生しました: チケット 2からの最後のトランザクションが既に実行中としてマークされているにもかかわらず、チケットがまだポップされていないウィンドウがありました。VC2は代わりにチケットをポップしましたが、参加者には通知しませんでした。これは、VC1がチケットが変更されるまで無期限に待機し続けることを意味し、さらにワーカーを強制終了できなくなるという追加の影響がありました。
    このループがループ条件の変化に応答できるように、毎秒ブレークする必要があるかどうかをチェックすることでこの問題を修正します。また、新しいステージを登録して、ループがkillシグナルにさらに応答できるようにします。(バグ #35392640)
    参考: バグ #35206392、バグ #35374425も参照してください。
  • グループレプリケーション: Network_provider_manager::open_xcom_connection()で発見されたメモリリークを削除しました。 (バグ #34991101)
  • グループレプリケーション:グループアクションがグループに送信され、コーディネーターで接続が切断されると、グループのメンバーは様々な状態にあり、調整されたアクションを受け取ったメンバーはそれを実行するメンバーを待機し、実行を開始したメンバーは処理するものが何もないため、グループの調整に問題が発生しました。
    このような場合、全てのメンバーがアクションを完了するまでグループアクションを待機させることで、この問題が発生するのを防ぎます。(バグ #34815537)
  • グループレプリケーション: グループレプリケーションによって間接的に作成されたOpenSSL接続によって使用されるリソースのクリーンアップが、常に期待どおりに実行されませんでした。この問題は、グループレプリケーションによってそのような接続が作成された時にいつでも呼び出すことができるクリーンアップ機能を追加することで修正されています。(バグ #34727136)
  • JSON: JSON_VALUE()の結果が空の文字列で、ユーザー変数に割り当てられた場合、次に示すように、ユーザー変数が代わりにNULLに設定される場合がありました:
    mysql> SELECT JSON_VALUE('{"fname": "Joe", "lname": ""}', '$.lname') INTO @myvar;
    Query OK, 1 row affected (0.01 sec)

    mysql> SELECT @myvar = '', @myvar IS NULL;
    +-------------+----------------+
    | @myvar = '' | @myvar IS NULL |
    +-------------+----------------+
    | NULL | 1 |
    +-------------+----------------+
    1 row in set (0.00 sec)

    この修正により、表示されたクエリは期待どおり(1, 0)を返すようになりました。(バグ #35206138)

  • JSON: 一部のJSONスキーマは、JSON_SCHEMA_VALID()によって常に正しく処理されるとは限りませんでした。(バグ #109296、バグ #34867398)
  • まれに、MySQLサーバーが期待どおりにエラーメッセージを出力せずに終了することがありました。(バグ #35442407)
  • MySQL 8.0.31で追加され、MySQL 8.0.32でリファクタリングされた内部リソースグループの機能強化は、現在は元に戻されています。(バグ #35434219)
    参照: 元に戻されたパッチ: バグ #34702833。
  • サーバーを再起動せずにMySQL 5.7からMySQL 8.0にインプレースアップグレードすると、テーブルでクエリを実行する時に予期しないエラーが発生する可能性がありました。この修正により、アップグレードとクエリの間にサーバーを再起動する必要がなくなります。(バグ #35410528)
  • MySQL 8.0.33の修正により、既に解決されたORDER BY項目が再度解決されないように変更されました(通常、派生テーブルがマージされる場合と同様)。しかし、これは、ORDER BY項目自体が参照である場合を処理しませんでした。(バグ #35410465)
    参考: この問題は、バグ #34890862のリグレッションです。
  • session_track_gtidsの変更が常に正しく処理されるとは限りませんでした。(バグ #35401212)
  • 一部のポインターは、ステートメントの実行後に常に解放されるわけではありません。(バグ #35395965)
  • ストアドルーチン内のサブクエリの一部のインスタンスは、常に正しく処理されるとは限りませんでした。(バグ #35377192)
  • サーバーからクライアントに送信されるネットワークパケットデータの強化された解析。(バグ #35374491)
  • 暗号化の強化によりコンプライアンスが強化され、非推奨のAPIの使用が削除されました。(バグ #35339886)
  • テーブル名と列名で指定された列参照が関数 find_item_in_list()で検索される時、検索された項目にテーブル名がない可能性があることは、まだ解決されていないため無視されました。この問題は、求められている項目内のnullテーブル名を明示的にチェックすることで修正されます。(バグ #35338776)
  • 非推奨のmysqlpumpコマンドラインユーティリティをサポートするために存在するlz4_decompressおよびzlib_decompressコマンドラインユーティリティは非推奨になりました。(バグ #35328235)
  • LIKE '%...%'を使用したクエリは、以前のバージョンのMySQLよりもパフォーマンスが低下していました。(バグ #35296563)
  • Bounded_queue::push()で、Key_generator::make_sortkey()が UINT_MAX(エラー)を返す場合、キーは生成されていません。この問題が発生した場合、内部キューは更新されなくなりました。
    この修正の一環として、push()はエラー時にtrueを返すようになりました。(バグ #35237721)
  • authentication_ociプラグインは、フェデレートされプロビジョニングされたユーザーが、OCI CLIを通じて生成された一時的なキーペアを使用して、マップされたプロキシユーザーとしてDBシステムに接続できるように修正されました。(バグ #35232697)
  • 共通テーブル式を使用する一部のクエリは、常に正しく処理されるとは限りませんでした。(バグ #35231475)
  • 内部関数 compare_pair_for_nulls()は、必ずしも明示的な戻り値を設定するとは限りませんでした。(バグ #35217471)
  • MySQLコーディングスタイルと衝突する、clang-tidyチェックを削除しました。(バグ #35208735)
  • クエリの内部部分と外部部分の両方でEXISTSを使用する一部のサブクエリが正しく処理されませんでした。(バグ #35201901)
  • ローテーションされた監査ログファイルは、前のファイルの値を継続するのではなく、常にブックマークのID値をゼロにリセットするようになりました。(バグ #35200070)
  • ファイルソートによって並べ替えられる項目を評価する時に、エラーが常に正しく伝播されるとは限りませんでした。(バグ #35195181)
    参考: バグ #35145246も参照してください。
  • ROLLUPに関する以前の問題の修正により、デバッグビルドでのサーバーの早期終了が発生しました。(バグ #35168639)
    参考: この問題は、バグ #33830659のリグレッションです。
  • Item_func_make_set::val_str()の実装を簡素化し、入力引数を再利用しようとせず、代わりに常にローカル文字列バッファを使用するようにしました。(バグ #35154335、バグ #35158340)
  • サブクエリを派生テーブルとの結合に変換し、含まれるクエリをグループ化する場合、グループ化を行うための追加の派生テーブルを作成しました。このプロセスでは、最初の選択リスト項目を包含クエリから追加の派生テーブルに移動し、元の全ての選択リスト項目(独自の派生テーブルを取得するサブクエリを除く)を追加の派生テーブルの列に置き換えます。
    このロジックは、デフォルト値が内部でモデル化される方法が原因で、DEFAULTを正しく処理できませんでした。この修正により、前述の変換を受けるクエリでのDEFAULT(expression)のサポートが追加されます。この修正により、この同じ変換の結果として、選択リスト内の同じ列の2つの出現に同じ項目名が与えられるというメタデータ内の項目名の問題も解決されます。(バグ #35150085、バグ #35101169)
  • SELECT * FROM t1 WHERE (SELECT a FROM t2 WHERE t2.a=t1.a + ABS(t2.b)) > 0の形式のクエリは、サブクエリでは複数の行を返しますが、subquery_to_derived最適化が有効になっている場合、変換が誤って適用され、クエリは間違った結果を返しました。(バグ #35101630)
  • 競合する可能性のある特定のGRANTステートメントの処理が改善されました。(バグ #35089304)
  • MEMBER OF()とORDER BY DESCの両方を使用したクエリは、JSON列に複数値のインデックスを作成した後、部分的な結果セットのみを返しました。これはMySQL 8.0.30で修正された問題に似ていますが、問題のあるクエリにORDER BY DESC句が追加されています。(バグ #35012146)
    参考: バグ #106621、バグ #33917625も参照してください。
  • インデックススキップスキャンの場合、最初の範囲の読み取りでは、最初の範囲の終わりを示す範囲の終わりの値が設定されましたが、次の範囲の読み取りでは古い範囲の終わりの値がクリアされず、この古い値が現在の範囲に適用されます。示された範囲の終わりの境界は前の範囲読み取りで既に越えられていたため、読み取りが停止し、結果で複数の行が欠落します。
    このような場合、古い範囲の終わりの値が確実にクリアされるようにすることで、この問題を修正します。(バグ #34982949)
  • デバッグサーバーは、DECIMAL値を含む特定の操作でアサートされました。(バグ #34973932)
  • 派生テーブルと結合を使用するためにサブクエリを変換する時に、選択リスト内の式を追加および置換する全てのインスタンスは、参照カウントが適切に維持されるように変更されました。(バグ #34927110)
  • インデックスマージでは、同様のコストがかかる場合、ソートユニオンプランよりもRORユニオンプラン(つまり、RowID Ordered Retrievalを使用)を優先する必要があります。これは、ソートユニオンでは行IDによる行の並べ替えがさらに必要ですが、RORユニオンでは必要ないためです。
    OR条件を含むWHERE句の各部分に対して、範囲オプティマイザーは可能な限り最適な範囲スキャンを取得し、これら全ての範囲スキャンを使用してインデックスマージスキャン(つまり、ソートユニオンスキャン)を構築します。全ての最良の範囲スキャンが RORスキャンでもあることが判明した場合、範囲オプティマイザーは常にRORユニオンスキャンを提案します。これは、RORユニオンスキャンの方が常にソートユニオンスキャンよりも安価であるためです。OR条件の一部にとって最適な範囲スキャンがRORスキャンではない場合、問題が発生しました。この場合、範囲オプティマイザーは常にソートユニオンを選択しました。これは、RORスキャンを選択することが有利な場合にも当てはまります(OR条件の一部を処理するのに最適な範囲スキャンではない場合でも)。それは、これによって、行IDで行を並べ替える必要がなくなるからです。
    このような場合、最適な範囲スキャンを決定する時に、範囲オプティマイザーは、可能なRORスキャンがあるかどうかも検出し、この情報を使用して、OR条件の各部分に少なくとも1つの可能なRORスキャンがあるかどうかを確認します。そうである場合は、範囲オプティマイザーを再実行して、OR条件の各部分を処理するための最適なRORスキャンを取得し、RORユニオンパスを作成します。次に、最終計画を提案する時に、このコストをソートユニオンのコストと比較します。(バグ #34826692、バグ #35302794)
  • ビュー定義が選択したテーブルで使用されている照合順序が、collation_connectionの現在のセッション値と一致しない場合、ビューから選択すると、Illegal mix of collations ... for operation '='というエラーが発生することがありました。(バグ #34801210)
  • 有効なMySQLコマンド(useおよびstatus)およびC API関数(mysql_refresh、mysql_stat、mysql_dump_debug_info、mysql_ping、mysql_set_server_option、mysql_list_processes、mysql_reset_connection)は、コマンドを実行したり関数を呼び出したりしてもエラーは発生しませんでしたが、監査ログにエラーメッセージを書き込む可能性がありました。(バグ #33966181)
  • 最大固定配列サイズを512ではなく8192に増やしました。これにより、512エントリを超える可能性があるmysqladmin拡張ステータス要求の問題が修正されます。(バグ #30810617)
  • mysqldump --column-statisticsオプションは、8.0.2より前のMySQLバージョンに対してinformation_schema.column_statisticsから選択しようとしましたが、これはサーバーによってサポートされていない警告列統計を生成し、オプションをfalseに設定します。(バグ #28782417)
  • MySQLがディレクトリ名の長さを取得するために使用する関数が強化されました。(バグ #28047376)
  • 暗黙的な集計を使用してクエリを実行すると、行をフィルターで除外するHAVING句がクエリに含まれていない限り、正確に1行が返されるはずです。しかし、FALSEと評価されるHAVING句を含むクエリではこれが無視され、関係なく行が返されることがありました。(バグ #14272020)
  • 条件内の列が置換される必要がある派生条件プッシュダウンを含むクエリの場合、置換項目がROLLUPでラップされ、一致する項目が存在しない時に、一致する項目が存在することがわかっていても、一致する項目が見つかりませんでした。(バグ #111665、バグ #35570065)
    参考: この問題は、バグ #33349994のリグレッションです。
  • 削除できたはずのORDER BYと共にクエリ内に未使用のウィンドウ関数が存在すると、予期しないサーバー終了が発生しました。(バグ #111585、バグ #35168639、バグ #35204224、バグ #35545377)
    参考: この問題は、バグ #35118579のリグレッションです。
  • ORDER BY RANDOM_BYTES()はクエリ出力に影響を与えませんでした。(バグ #111252、バグ #35148945、バグ #35457136)
  • ユーザー定義関数をロードする時に発生する可能性があった問題を修正しました。(バグ #110576、バグ #35242734)
  • FLUSH STATUS、COM_CHANGE_USER、およびSELECT FROM I_S.PROCESSLISTを同時に実行すると、デッドロックが発生する可能性がありました。COM_STATISTICS、COM_CHANGE_USER、およびSHOW PROCESSLISTの同時実行でも同様の問題が観察されました。(バグ #110494、バグ #35218030)
  • mysqldumpユーティリティは、生成された列に対して無効なINSERTステートメントを生成する可能性がありました。(バグ #110462、バグ #35208605)
  • 最適化中、範囲選択ツリーの作成では、IN()述語の左側に基づいて異なるロジックが使用されます。フィールド項目の場合、右側の各値がORツリーに追加されて、必要な式が作成されます。行項目の比較(例: WHERE (a,b) IN ((n1,m1), (n2, m2), ...))の場合、論理和正規形(DNF)の式が必要です。DNF式は、列値を含むANDツリーをRHS値のセットごとにORツリーに追加することによって作成されますが、代わりに、ORツリーがANDツリーに追加されたため、実行時の複雑さがO(n2)であることが原因で、ツリーのマージには指数関数的な時間が必要になりました。(バグ #108963、バグ #34758905)
  • SELECTを使用してテーブルを作成し、ステートメントにGEOMETRYタイプの式が含まれる場合、MySQLはデフォルトで空の文字列を列値として生成する可能性がありました。この問題を解決するために、MySQLは、このような状況下ではGEOMETRYタイプの列のデフォルト値を生成しなくなりました。(バグ #107996、バグ #34426943)

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


MySQL Editions

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