2023.01.25

MySQL

MySQL Community Server 8.0.32 GA版(リリース日:2023年1月17日)

認証関連

  • サーバーは、ADドメインにアクセスできない場合などの実際のLDAPサーバーエラーだけでなく、LDAP認証の失敗に対してLDAP_OPERATIONS_ERRORを返す可能性がありました。現在、サーバーは、認証エラーを示すために、MySQL固有のエラーコードである、LDAP_AUTHENTICATION_ERRORを返します。(バグ #100333、バグ #31680279)

C API関連

  • 公開鍵が使用可能であっても、sha256_password_auth_client_nonblocking()関数は常にエラーを返しました。(https://dev.mysql.com/doc/index-other.htmlで入手可能なMySQL Server Doxygenのドキュメントを参照してください。)(バグ #34556764)

コンパイル関連

  • Microsoft Windows: SASLベースのLDAP認証ではクライアントのみがサポートされているため、authentication_ldap_saslサーバープラグインはWindows用にビルドされなくなりました。(バグ #34448155)
  • Windowsでは、VS 2022を使用してMySQLサーバーをコンパイルすると、テストとNDBストレージ エンジンが有効になっている場合、「parser-t」という名前の2つのプロジェクトに関するエラーが発生します。大文字と小文字を区別しないオペレーティングシステムでの競合を避けるために、テストの名前が変更されました。(バグ #34790413)
  • MacOSでは、Xcode 14によって生成された廃止予定の警告が沈黙しました。これには、sprintf(3)の代わりにsnprintf(3)を使用する提案、および64ビットから32ビット整数への精度の損失の可能性に関する警告が含まれます。(バグ #34776172)
  • プラグインからブーストライブラリの使用を削除しました。(バグ #34694419)
  • 「Makefile」という名前のサードパーティファイルは使用されていなかったため、全て削除しました。(バグ #34648199)
  • clang 15のサポートが追加されました。(バグ #34638573)
  • 未使用のコードを見つけて削除しました。fastcovを使用して見つけました。(バグ #34583577)
  • 「Ubuntu 22.04のgcc 11.2.0 RelWithDebInfo」および「el6のgcc 8.3.1」で生成された警告を修正することにより、ndbclusterプラグインのビルドに関連するコードを改善しました。(バグ #34384889)
  • デバッグとgcovレポートを簡素化するために、BisonとFlexのソースファイルに完全なファイルパスを使用するようになりました。(バグ #109022、バグ #34776151)
  • ビルドユーザーがmysqld一時ディレクトリにアクセスできない場合、MySQLのビルドは失敗しました。現在、INFO_BINファイルの作成時に--no-defaultsが使用されるようになりました。(バグ #108947、バグ #34756282)

非推奨と削除関連

  • 引用符で囲まれていない識別子の最初の文字としてのドル記号($)の使用は非推奨になり、警告(ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT)が発生します。将来のリリースで削除される可能性があります。
    これは、データベース、テーブル、ビュー、列、ストアドプログラム、またはエイリアスの名前にそのような識別子を使用するステートメントに影響します。ドル記号で始まる識別子は、サーバーのSQLモードに応じて、引用符で囲まれている場合(つまり、一重引用符または二重引用符 ('または")、またはバッククォート文字(`)で区切られている場合)にのみ許可されます。例:

    mysql> TABLE $t; # Unquoted, produces warning
    +------+
    | a |
    +------+
    | 1 |
    | 2 |
    +------+
    2 rows in set, 1 warning (0.00 sec)

    mysql> SHOW WARNINGS\G
    *************************** 1. row ***************************
    Level: Warning
    Code: 1681
    Message: '$ as the first character of an unquoted identifier' is deprecated and
    will be removed in a future release.
    1 row in set (0.00 sec)

    mysql> TABLE `$t`; # Quoted, no warning
    +------+
    | a |
    +------+
    | 1 |
    | 2 |
    +------+
    2 rows in set (0.00 sec)

    ユーザー変数は、この変更の影響を受けません。例えば、ステートメント SELECT 1 INTO @$xは警告を生成しません。
    (バグ #34785775)
    参照: バグ #34684193も参照してください。

  • CLIENT_NO_SCHEMAフラグは非推奨です。CLIENT_NO_SCHEMAをmysql_real_connect()にclient_flag引数として指定するクライアントプログラムは、フラグとdb引数を省略して、接続でデータベース値を現在の(またはデフォルトの)データベースに設定できるようになりました。mysql_real_connect()がCLIENT_NO_SCHEMAで呼び出されると、libmysqlclientライブラリは標準エラーに警告を表示するようになりました。さらに、サーバーは、接続にCLIENT_NO_SCHEMAがある場合、実行された準備されていないクエリごとに非推奨の警告を追加します。
  • 以前は、サーバーへの接続での圧縮の使用をより詳細に制御するために、従来の圧縮制御パラメーターが廃止され、新しい設定パラメータに置き換えられました。新しいパラメータと非推奨のパラメータは次のとおりです:
    • --compression-algorithmsクライアントオプションは、従来の--compressクライアントオプションとCompressionステータス変数の非推奨を有効にします
    • MYSQL_OPT_COMPRESSION_ALGORITHMS C APIオプションは、従来のMYSQL_OPT_COMPRESS C APIオプションの非推奨を有効にします。
    • CHANGE MASTER TOステートメントのMASTER_COMPRESSION_ALGORITHMSオプションは、従来のslave_compressed_protocolシステム変数の非推奨を有効にします。

    非推奨のパラメータは、将来のMySQLバージョンで削除される予定です。
    現在、次のクライアントプログラムは、クライアントユーザーが--compress(または該当する場合は-C)を使用してプログラムの1つを呼び出すと、非推奨の警告を標準エラーに出力します:mysqlpump、mysqlcheck、mysql、mysqladmin、mysqlbinlog、mysqldump、mysqlimport、mysqlshow 、mysqlslap、mysql_upgrade、およびmysqltest。
    mysqlbackup --compressオプションには様々な機能があり、非推奨ではありません。

キーリング関連

  • component_keyring_oci設定ファイルで指定され、Oracle Cloud Infrastructure Consoleから、またはOracle Cloud Infrastructure APIに問い合わせることによって取得されたエンドポイントのホスト名は、Oracle Cloud Infrastructure Vault キーリングコンポーネントのMySQL設定を生成する時に以前は削除する必要があったhttps://プレフィックスを保持できるようになりました。(バグ #34636297)

プラガブル認証

  • Windowsでは、クライアント側のKerberos認証プラグインがMIT Kerberosライブラリを介してGSSAPIをサポートするようになりました。Windowsのauthentication_kerberos_client認証プラグインでサポートされる新しいプラグインオプションを使用して、実行時にSSPIとGSSAPIのどちらかを選択できます。クライアントユーザーは、 --plugin-authentication-kerberos-client-modeコマンドラインオプションを指定してmysqlまたはmysqldumpを呼び出し、モードをGSSAPIに設定します。authentication_kerberos_clientプラグインのデフォルトモードはSSPIで、以前はWindowsで唯一の認証方法でした。

空間データのサポート

  • MySQLのST_Transform()関数は、EPSG 1042(Local Northing)、EPSG 1043(Local Easting)、EPSG 9816(チュニジアマイニンググリッド)、およびEPSG 9826(Lambert Conic Conformal(西向き))を除く、全てのデカルト投影をサポートするようになりました。(バグ #27272733、バグ #34495023)

SQL構文関連

  • このリリースで追加されたexplain_formatシステム変数を使用して、クエリ実行プランを取得し、FORMATオプションを持たないEXPLAINステートメントの出力のデフォルト形式を設定できるようになりました。FORMATオプションのように、この変数は、TRADITIONAL、JSON、またはTREEのいずれかの値を取ることができます。DEFAULTは、TRADITIONALのシノニムとしてもサポートされています。(DEFAULTは、EXPLAINのFORMATオプションではサポートされていません。) explain_formatの値がTREEであるとすると、この場合、そのようなEXPLAINからの出力は、EXPLAINステートメントの一部としてFORMAT=TREEが指定されたかのように、ツリーベースの形式を使用します。
    explain_formatに設定された値は、FORMATオプションによってオーバーライドされます。これは、explain_formatがTREEに設定されている場合、EXPLAINの呼び出し時にFORMAT=JSONを指定すると、explain_formatの値が無視され、結果がJSON形式を使用して表示されることを意味します。
    explain_formatは EXPLAIN ANALYZEの動作にも影響します。このステートメントはTREE形式のみをサポートするため、explain_formatの値がTREEでない場合、これは、TREE形式を明示的に指定しないEXPLAIN ANALYZEステートメントで、This version of MySQL doesn't yet support 'EXPLAIN ANALYZE with format format'というエラーが発生することを意味します。
    新しいシステム変数には、グローバルスコープとセッションスコープの両方があり、永続化でき、コマンドラインから(--explain-formatとして)またはmy.cnfオプションファイルで設定できます。
    参照: バグ #33629360も参照してください。

スレッドプール関連

  • 非アクティブのために接続が終了する度に、スレッドプールプラグインは、接続のタイムアウトに関する一般的なメッセージのみを出力しました。これにより、このようなタイムアウトの分析が必要以上に難しくなることがよくありました。新しいINFO_LEVELメッセージは、スレッドプールでの非アクティブが原因で接続が終了したこと、および、この判断を行うために使用されたタイムアウト値を明確にします。(バグ #34767607)
  • このリリースでパフォーマンススキーマのtp_thread_stateテーブルに追加された2つの列によって、スレッドのタイプを識別し、このテーブルのスレッドをパフォーマンススキーマスレッド テーブルのスレッドにマップできます。スレッドのタイプはtp_thread_stateテーブルのTP_THREAD_TYPE列に表示され、スレッドの一意のIDがTHREAD_ID列に表示されるようになりました。(バグ #34020058)

追加・変更された機能

  • 重要な変更: OpenSSLライブラリがバンドルされているプラットフォームでは、リンクされたMySQLサーバー用のOpenSSLライブラリがバージョン 1.1.1sに更新されました。OpenSSLバージョン 1.1.1sで修正された問題は、https://www.openssl.org/news/cl111.txtで説明されています。(バグ #34828308)
  • システムのcurlライブラリにリンクするのではなく、curlを含むバイナリパッケージは、curl 7.86.0を使用するようにアップグレードされました。(バグ #34828111)
  • MySQL 8.0.31で追加された内部リソースグループ拡張機能はリファクタリングされていますが、Resource_group_supportedステータス変数は引き続きサポートされています。(バグ #34702833、バグ #34699751)
    参考: 元に戻されたパッチ: バグ #34264356。

主なバグ修正

  • 重要な変更: max_join_sizeシステム変数の実装は、行またはディスクシークの最大数として文書化されていましたが、行またはディスクシークの数を直接チェックせず、代わりにmax_join_sizeを許容される最大推定コストとして扱いました。コストと行数は相関していますが、同じではないため、一部の大きいクエリの続行が許可されると、予期しない結果が生じる可能性がありました。
    このリリースでは、max_join_sizeの使用方法を変更して、ベーステーブルの行アクセスの最大数を実際に制限するようにしました。ベーステーブルからより多くの行を読み取る必要があると見積もられた場合は、エラーが発生します。これにより、実際の動作が文書化された内容をよりよく反映するようになります。(バグ #83885、バグ #25118903)
  • InnoDB: いくつかのアダプティブハッシュインデックス(AHI)コードの最適化と改善が実装され、潜在的な競合状態を含む様々な問題に対処しました。(バグ #33601434)
  • レプリケーション: CHANGE REPLICATION SOURCE TOを使用してサーバー上でSOURCE_HEARTBEAT_PERIODが非常に小さい値(1マイクロ秒など)に設定され、mysqlbinlogクライアントプログラムが--read-from-remote-serverおよび--stop-never=1で開始された場合 全てのイベントが送信される前に、バイナリログダンプスレッドがEOFパケットをクライアントに送信する可能性がありました。
  • レプリケーション: テストで誤ったエラーを引き起こしたsql/rpl_group_replication.ccからアサートを削除しました。(バグ #34619134)
  • レプリケーション: MySQLが--server-id=0で開始された後、SET PERSIST server_id=N(Nはゼロより大きい整数)を使用してサーバーIDを変更しようとし、サーバーを再起動すると、次の結果が得られました:
    • SELECT @@server_idは、Nを戻しました。
    • START REPLICAなどのレプリケーションSQLステートメントは、ER_SLAVE_CONFIGURATIONで拒否されました。

    この問題を修正するために、このようなチェックでは、起動オプションに渡される値ではなく、サーバー変数の値が使用されるようになりました。(バグ #34412816)

  • レプリケーション: NDBバイナリログインジェクタによって生成された圧縮されたバイナリログイベントをレプリケートする時に、リレーログの位置がマルチスレッドアプライヤーで更新されなかったため、レプリケーションがハングしました。(バグ #33889030)
    参照: バグ #33784241も参照してください。
  • レプリケーション: SQLスレッドがトランザクションを処理している間にSTOP REPLICA SQL_THREADを発行すると、イベントグループが完了するのを 60秒間待機してから期待どおりにSQLスレッドをシャットダウンするのではなく、レプリケーションがすぐに停止しました。
    この問題の根本的な原因は、最後のイベント開始時刻を格納する内部変数が、SQLスレッドの再起動後にリセットされなかったためです。
    これを修正するためには、SQLスレッドが開始される度に最後のイベント開始時刻を保持する変数をリセットします。(バグ #33646899)
  • レプリケーション: それらはそうではないことを暗示しているかもしれませんが、ログメッセージ Setting super_read_only=ON (ER_GRP_RPL_SUPER_READ_ON)とSetting super_read_only=OFF (ER_GRP_RPL_SUPER_READ_OFF)は、操作が試行された後にのみ書き込まれました。事前、または操作が進行している間ではありません。これは、変数の設定が拒否された時に混乱を招くことがありました。そして、これは、設定の試行自体がログに記録される前にログに記録されました。これが発生しないようにするために、これらのメッセージは操作を試みる直前に記録されるようになりました。(バグ #108843、バグ #34728079)
  • レプリケーション: relay_log_space_limitシステム変数は64ビット値ですが、その有効な最大値は内部で32ビット値として指定されました。(バグ #106323、バグ #33799840)
  • レプリケーション: バイナリログをローテーションする時に実行されたgtid_executedテーブルの不要な更新を削除しました。(バグ #106116、バグ #33759477)
  • グループレプリケーション: MySQLパフォーマンススキーマのreplication_group_communication_informationテーブルのWRITE_CONSENSUS_SINGLE_LEADER_CAPABLE列は、グループ内のPaxosシングルリーダーセットアップの実行時の値を反映し、メンバーに参加する際にgroup_replication_paxos_single_leaderの値がどうあるべきかをユーザーに知らせます。
    シングルリーダーを有効にしてブートストラップされたが、そのプロトコルバージョンがそれをサポートしないものにダウングレードされたグループは、予想どおりWRITE_CONSENSUS_SINGLE_LEADER_CAPABLEが0に等しいと報告しましたが、group_replication_paxos_single_leader = 0を使用してインスタンスをグループに参加させることはできませんでした。
    この問題を解決するために、動作を変更し、group_replication_paxos_single_leaderの値を、グループが実行している通信バージョンと一致させます。この変数はMySQL 8.0.27で導入され、以前のバージョンでは知られていない、または、使用されていないため、次のルールを適用するようになりました:

    • ノードがMySQL 8.0.26以前を実行しているグループに参加しようとし、バージョンが8.0.27以降の場合、グループに参加する前にgroup_replication_paxos_single_leaderをOFFにする必要があるというエラーでこの試みを拒否します。
    • group_replication_set_communication_protocol()を使用して8.0.27未満のバージョンを設定しようとしていて、バージョンが8.0.27以降である時、group_replication_paxos_single_leaderがOFFでない場合、関数呼び出しを拒否します。

    さらに、group_replication_set_communication_protocol()の実行後にグループリーダーの変更が許可されているかどうかを判断するためにチェックされる値も変更します。以前は、これはgroup_replication_paxos_single_leaderの実行時の値であり、グループの再起動後にのみ有効になりました。代わりに、group_replication_set_communication_protocol()を実行する時に、前述のreplication_group_communication_informationテーブルのWRITE_CONSENSUS_SINGLE_LEADER_CAPABLE列によって示される値を使用するようになりました。(バグ #34555045、バグ #34828311)

  • グループレプリケーション: グループがgroup_replication_consistency = AFTERで実行され、セカンダリが不安定なネットワークなどの外部条件が原因で失敗した場合、セカンダリで「Transaction 'GTID' does not exist on Group Replication consistency manager while receiving remote transaction prepare.」というエラーが発生することがありました。
    この問題の根本的な原因は、プライマリが、セカンダリが再参加したView_change_log_eventの順序どおりにログアウトする可能性があることでした。セカンダリがプライマリをグループドナーとして使用すると、セカンダリがグループに不適切に追いつき、最終的にグループトランザクションに対して誤ったGTIDを生成する可能性がありました。グループレプリケーションプライマリは、View_change_log_eventが先行する全てのトランザクションの後にログに記録されることを保証しますが、グループグローバルオーダーのView_change_log_eventの後に順序付けされたトランザクションがイベントの前にログに記録される可能性があるウィンドウがありました。
    この問題を解決するために、ビューの前に順序付けされたトランザクションは常にView_change_log_eventの前に記録され、ビューの後に順序付けされたトランザクションは常にこのイベントの後に記録されるようになりました。これは、バイナリロググループコミット内のトランザクションがコミットされる順序を保証するバイナリログチケットマネージャーによって実行されるようになりました。(バグ #104980、バグ #33405699)
    参照: バグ #34746357も参照してください。
  • Microsoft Windows: WindowsプラットフォームでMySQLをコンパイルする時に、CMakeの-DWITH_WIN_JEMALLOCオプションが常に正しく処理されるとは限りませんでした。(バグ #108341、バグ #34698376)
  • JSON: JSON_ARRAYAGG()またはJSON_OBJECTAGG()の結果を列に保存している間、結果がタイプSUM_FUNC_ITEMの項目であるために、データタイプ情報が失われました。これを修正するために、タイプのチェックを削除し、元のタイプ情報を保持します。(バグ #108326、バグ #34548259)
  • サーバーへの一部のリモート接続が正しく処理されませんでした。この問題は、require_secure_transportの問題に対する以前の修正の結果として発生しました。(バグ #348557411)
    参照: この問題はバグ #34094706のリグレッションです。
  • sql_optimizer.ccのKey_use_arrayの非決定論的ソートが原因で、一部のクエリプランが安定しませんでした。std::sort()の代わりにstd::stable_sort()でソートするようになりました。(バグ #34823952)
    参照: この問題はバグ #25965593のリグレッションです。
  • システムのOpenLDAPライブラリにリンクするのではなく、OpenLDAPを含むバイナリパッケージは、バージョン 2.5.13を使用するようにアップグレードされました。(バグ #34815046)
  • 場合によっては、認証中にサーバーによってMySQLクライアントプログラムに予期しないパケットが送信されると、無限ループが発生する可能性がありますした。(バグ #34805922)
  • GISデータは、ウィンドウ関数で常に正しく処理されるとは限りませんでした。(バグ #34778646)
  • スレッドは、ユーザーのデフォルトリソースグループ(USR_default)に割り当てられた後でも、削除されたリソースグループのCPUにバインドされたままになりました。USR_defaultのCPU優先度が0で、CPUアフィニティがないため、この修正により、スレッドはUSR_defaultを使用して任意のCPUを実行できるようになりました。(バグ #34748973)
  • JSONロギングが有効な場合、audit_log_rotate()関数を呼び出してもファイルが期待どおりにローテーションされませんでした。ローテーションされたファイル名は、ファイルに記録された最後のイベントのタイムスタンプで構成されます。ファイルが空の場合、最後のタイムスタンプは、既に作成されたファイルのタイムスタンプと同じです。この問題を修正するために、ファイルが空の場合、関数は現在の時刻を使用してファイルに名前を付けるようになりました。(バグ #34733508)
  • 複数のラテラル派生テーブルを持つ一部のクエリでは、期待した結果が得られませんでした。(バグ #34716246)
  • バンドルされているzlibライブラリは、zlib 1.2.13にアップグレードされました。zlib 1.2.13は、サポートされる最小のzlibバージョンになりました。(バグ #34711762)
  • 特定のINTERSECTクエリが正しく処理されませんでした。(バグ #34642435)
  • 指定された最大値よりも大きい値でMAX_EXECUTION_TIMEオプティマイザヒントを使用すると、MySQL 8.0.30へのアップグレードが完了しませんでした。これにより、サーバーは、アップグレードプロセスによって回復不能なエラーとして解釈された警告を報告しました。(バグ #34607401)
  • 場合によっては、ウィンドウ関数の評価が正しく実行されませんでした。(バグ #34572136)
    参照: この問題はバグ #32644631、バグ #32802301のリグレッションです。
  • 一部のCTEが正しく処理されませんでした。(バグ #34572040、バグ #34634469)
    参照: この問題はバグ #33856374のリグレッションです。
  • 値をFLOAT (CAST(... AS FLOAT)、CONVERT(..., FLOAT)、JSON_VALUE(... RETURNING FLOAT))に変換する関数または演算子から返される値は、内部的に倍精度で格納されているため、内部表現の精度が高くなる場合があります。これにより、SELECT DISTINCTが重複を返したり、比較演算子が2つの等しい値を等しくないと誤って報告したりするなど、値が等しいかどうかをチェックする時に予期しない結果が生じることがありました。
    この問題は、値を返す前に値から余分な倍精度を取り除き、これらの変換演算子でfloatからstringへの変換をdouble形式ではなくfloat形式を使用することで解決します。(バグ #34554755)
  • query_expression::assert_not_fully_clean()のアサーションを削除しました。(バグ #34526104)
  • 単一のデータベースに非常に多数のテーブルを持ちMySQL 5.7からMySQL 8.0にアップグレードすると、サーバーで過剰なメモリが消費されました。テーブルをアップグレードできるかどうかをチェックするプロセス中に、事前に全てのデータディクショナリテーブルオブジェクトをフェッチし、それぞれを処理してその名前をフェッチし、次にリストに対してCHECK TABLE ... FOR UPGRADEを実行したことがわかりました。この場合、事前に全てのオブジェクトをフェッチする必要はなく、メモリ消費の大きな原因となっていました。
    この問題を修正するために、このような場合に一度に1つのテーブルオブジェクトを取得し、必要なチェックを実行し、その名前を取得して、オブジェクトを解放してから、次のオブジェクトに進むようになりました。(バグ #34526001)
  • 自然結合列を作成する場合、実体化された派生テーブルの一部として追加された非表示の列は、結合条件の構築に使用されます。これは後で、結合が派生テーブルへのプッシュダウンに適しているかどうかを確認するために使用されます。現在の問題は、この列が非表示になっているために派生テーブルから取得されなかった時に発生しました。これは、条件プッシュダウンの最適化が有効になっていない場合でも発生しました。関数インデックス用に追加された非表示の列だけでなく、内部的に追加された全ての非表示の列を拒否することで、この問題を解決します。(バグ #34523627)
  • タイプは、ユーザー変数から一貫して派生しませんでした。これは、例えば、次のステートメントを繰り返し実行することで確認できます:
    CREATE TABLE t AS SELECT @max_error_count UNION SELECT 'a';
    SHOW CREATE TABLE t;

    この特定のケースでは、SHOW CREATE TABLEステートメントの出力は、最初は`@max_error_count` textを示し、その後の繰り返しでは`@max_error_count` mediumblobを示しました。(2番目は正しいです。)(バグ #34523475)

  • ユーザーアカウントのホスト解決を改善するためにMySQL 8.0.23で行われた作業に続いて、CREATE USERの完了に必要な時間が大幅に増加しました。特に、多くのこのようなステートメントを連続して実行した場合に。
    このリリースにアップグレードする前に、多くのこのようなステートメントを連続して発行する場合に、単一のCREATE USER 'fakeuser' ACCOUNT LOCKを前に付けることによって、この問題を回避できます(これには既存のユーザー名と競合しない任意のユーザー名を使用できます)。終了したら、次のステートメントを発行してクリーンアップできます(また、そうする必要があります):

    DROP USER 'fakeuser';
    FLUSH PRIVILEGES;

    (バグ #34449016)

  • data_maskingサーバーサイドプラグインがランタイムエラーを発生させ、予期せず停止することがありました。(バグ #34445632)
  • 一部の複数ネストされたクエリが正しく実行されませんでした。(バグ #34377854)
  • 派生テーブルをマージする場合、ネストされた結合条件が派生テーブルに追加され、基になるテーブルがこの結合ネストに追加されます。また、結合条件は導出表に関連付けられています。
    テーブルが外部結合の内部テーブルである場合、またはテーブルが内部テーブルであり、結合が準結合でない場合、範囲アクセスの評価はスキップされます。派生テーブルの場合、基になるベーステーブルは後者の種類として扱われ、範囲分析はスキップされ、範囲アクセスメソッドは使用できませんでした。
    この問題を解決するために、埋め込みテーブルが派生テーブルである場合に範囲アクセスを評価し、派生テーブルに関連付けられた結合条件が範囲の最適化に使用されるようになりました。(バグ #34347116)
  • サブクエリで発行されたLOAD DATA INFILEステートメントにより、サーバーが誤った警告を返す可能性がありました(サブクエリは複数の行を返します)。(バグ #34336033)
  • 内部一時テーブルのリソース割り当ての処理が改善されました。(バグ #34174001)
  • INSTANTアルゴリズムを使用したドロップ後に特定の列が追加されると、データエラーが発生し、サーバーが終了する可能性がありました。(バグ #34122122)
  • SELECT 1 AS one FROM t WHERE 1=(SELECT 1 UNION SELECT 2)などのクエリが、次のように変換されます:
    SELECT 1 AS one
    FROM t
    JOIN ( SELECT 1 AS col1 UNION SELECT 2) derived
    WHERE 1 = derived.col1;

    この場合、オプティマイザは1 = derived.col1をUNIONにプッシュダウンし、SELECT 2からの寄与を削除して、誤った結果をもたらしました。現在、このような場合に条件をプッシュダウンすることはなくなりました。(バグ #33910786)

  • 全てのItemオブジェクトで参照カウントを使用することにより、複数の参照を持つItemツリーの保持を再実装しました。また、この変更により不要になった古いコードを削除しました。(バグ #33725415)
  • ORDER BYとLIMITのいずれかまたは両方を含む、括弧で囲まれた一部のクエリ式は、常に正しく処理されるとは限りませんでした。(バグ #33725330)
  • innodb_ddl_logテーブルの定義が変更された場合、データディクショナリのアップグレード中にInnoDBでアサートが発生しました。これは、テーブルと列の定義のutf8とutf8_binをそれぞれutf8mb3とutf8mb3_binに更新するなど、そのような変更が実質的にnull操作であった場合でも発生しました。(バグ #33688509)
    参照: この問題はバグ #33787300のリグレッションです。
  • SET PERSISTは、MyISAMの複数キーキャッシュ変数と同様に、コンポーネントによって登録された変数のドット区切りの名前を受け入れましたが、RESET PERSISTは構文エラーで同じ名前を拒否しました。この不一致を修正するために、ドット文字(.)を含む変数名のRESET PERSISTにサポートを追加します。(バグ #33417357)
  • 一部のグループ化されたクエリは、常に正しく処理されるとは限りませんでした。(バグ #33294005、バグ #33349994)
  • 多要素認証で最初の要素にauth_socket認証プラグインを使用すると、サーバーは第2要素の認証ワークフロー中に間違ったコードを実行し、エラーメッセージを返しました。2番目の要素は、任意の認証プラグインです。(バグ #33192223)
  • 構文がサポートされていない場合でも、INSERTステートメントで列識別子としてワイルドカードを使用することがパーサーによって許可されていたため、デバッグビルドでのアサートにつながり、リリースビルドではステートメントが無言で拒否されました。この構文は文法から可能性として削除され、現在は構文エラーとして厳密に処理されます。(バグ #33142665)
    参照: この問題はバグ #30528450のリグレッションです。
  • プリペアドステートメントでは、一部のタイプのサブクエリがサーバーの終了を引き起こす可能性がありました。(バグ #33100586)
  • 一部の浮動小数点リテラルは、常に正しく処理されるとは限りませんでした。(バグ #32824429)
  • テーブルエイリアスを含むDELETEステートメントにより、サーバーが断続的に終了する可能性がありました。(バグ #32762229)
  • INFO_SRCおよびINFO_BINを mysql-commonパッケージからmysql-community-server-coreパッケージに移動しました。このパッケージはmysqldと同じパッケージであり、RPMパッケージとの一貫性が向上しています。(バグ #32752147)
  • HAVING句内でMATCH()を使用する一部のクエリが正しく処理されませんでした。(バグ #32616816、バグ #32934558、バグ #34782389)
  • サブクエリを含むCREATE VIEWステートメントにより、デバッグビルドでアサーションが発生することがありました。(バグ #108783、バグ #34703610)
  • ユーザー定義のSQL関数にパラメータとして渡される動的パラメータのデータタイプの推定は、1つのパラメータに対してのみ正しいものでした。複数のパラメーターを使用すると、2番目以降のパラメータに対してそのような推定が実行されず、その結果、それらのタイプは常にMYSQL_TYPE_INVALIDとしてクライアントに誤って報告されました。(バグ #108545、バグ #34629157)
  • 内部関数 clone_os_copy_file_to_buf()は、部分読み取りの場合にバッファ位置を進めませんでした。
    (バグ #108317、バグ #34543194)
  • システムビューにアクセスするビューは、プッシュダウン条件にシステムビューのネイティブ関数を使用する式が含まれている場合、通常の使用中にアクセス拒否エラーが発生する可能性がありました。(バグ #108202、バグ #34515868)
  • ウィンドウ関数を使用すると、現在の行が間違ったレコードに基づいて再評価される場合がありました。(バグ #108008、バグ #34431996)
  • LIKE句を持つクエリのUNIONへの条件のプッシュダウンは、正しい文字セットを保持せず、(誤った)空の結果につながりました。
    この問題を2つの部分で解決します:

    • LIKE式の解決をリファクタリングすることにより、以前は文字セットの決定と伝播が常に互いに一貫していないコードの2つの別々のブロックで実行されていました。
    • 内部のparse_expression()関数に、クローン化されたリテラル文字列に文字セット接頭辞を追加することによって。

    (バグ #107787、バグ #34359297、バグ #34589153)

  • audit_logサーバーサイドプラグインは、実行されたクエリの特定の部分のみをログに記録するのではなく、複数のクエリ全体を常にログに記録していました。クエリの長さが設定されている時に変更することで、問題が解決します。(バグ #107390、バグ #34207811)
  • MySQL 8.0.27へのアップグレード後、特定のクエリがストアドプロシージャ内で実行される度に、比較的大量のメモリを消費し始めました。(バグ #107327、バグ #34190122)
  • maximum- プレフィックスを指定してmysqld起動オプションが使用された場合、対応するシステム変数の上限が設定されましたが、その現在の値は新しい制限に対してチェックまたは調整されておらず、そのため、場合によっては、指定された最大値よりも大きくなる可能性がありました。現在の値が新しいユーザー定義の最大値より大きい場合は、現在の値を調整することにより、これを修正します。(バグ #99029、バグ #31072098)
  • プリペアドステートメントがKILL QUERYを使用してキャンセルされた後、mysql_stmt_close() C API関数が応答を停止する可能性がありました。(バグ #84470、バグ #25584097)

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


MySQL Editions

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