2021.04.28

MySQL

MySQL Community Server 8.0.24 GA版(リリース日:2021年4月20日)

主な変更点

■ 監査ログ関連

● MySQL Enterprise Auditは、JSON形式のログファイルの監査ログファイルのプルーニングをサポートするようになりました。

■ コンパイル関連

● GCC 10は、EL7またはEL8でMySQLをビルドするためのサポートコンパイラになりました。このコンパイラは、devtoolset-10(EL7)またはgcc-toolset-10(EL8)パッケージで入手できます。また、libmysqlclient C APIライブラリに基づくサードパーティアプリケーションを構築する場合は、GCC 10を使用することをお勧めします。(バグ #32381003)

■ 接続管理関連

● 以前は、クライアントがwait_timeoutシステム変数で指定された期間内にサーバーへの接続を使用せず、サーバーがその接続を閉じた場合、クライアントは理由の通知を受け取りませんでした。通常、クライアントには、クエリ中にMySQLサーバーへの接続が失われた(CR_SERVER_LOST)か、MySQLサーバーがなくなった(CR_SERVER_GONE_ERROR)か、表示されます。

 このような場合、サーバーは接続を閉じる前に理由を接続に書き込み、クライアントはより詳細なエラーメッセージを受け取るようになりました。クライアントは非アクティブのためにサーバーによって切断されました。

 以前の動作は、古いサーバーへのクライアント接続および古いクライアントによるサーバーへの接続に引き続き適用されます。

■ エラー処理

● クライアント接続のエラーメッセージにポート番号が含まれるようになりました。例:Can't connect to MySQL server on '127.0.0.1:63333'。(バグ #30787660、バグ #98311)

■ キーリング関連

● MySQLキーリングは、以前はサーバープラグインを使用してキーストア機能を実装していましたが、現在は、次のキーリングコンポーネントから始めて、MySQLコンポーネントインフラストラクチャを使用するように移行しています:

  ・component_keyring_fileは、サーバーホストにローカルなファイルにキーリングデータを格納します。このコンポーネントは、MySQL CommunityエディションディストリビューションおよびMySQL Enterpriseエディションディストリビューションで利用できます。

  ・component_keyring_encrypted_fileは、サーバーホストにローカルな暗号化されパスワードで保護されたファイルに、キーリングデータを格納します。このコンポーネントは、MySQL Enterpriseエディションディストリビューションで利用できます。

 新しいキーリングコンポーネントは、既存のkeyring_fileプラグインおよびkeyring_encrypted_fileプラグインと類似していますが、設定が異なり、異なるオンディスクストレージフォーマットを使用し、キータイプとキーサイズの制限が少なくなっています。

 キーリングコンポーネントは、起動時に--early-plugin-load serverオプションを使用してロードされないか、起動時または実行時にシステム変数を使用して設定されます:

  ・起動時に、サーバーはマニフェストファイルを使用してロードするキーリングコンポーネントを決定し、ロードされたコンポーネントは初期化時に自身の設定ファイルを参照します。

  ・実行時に、新しいALTER INSTANCE RELOAD KEYRINGステートメントを使用すると、インストールされているキーリングコンポーネントをその設定ファイルを変更した後に再設定できます。

 キーリングコンポーネントがインストールされている場合、新しいパフォーマンススキーマkeyring_component_statusテーブルはそれに関するステータス情報を提供します。

 キー移行機能が拡張されました。以前は、キーの移行は1つのキーリングプラグインから別のキーリングプラグインにのみ発生しました。新しい--keyring-migration-to-componentサーバーオプションにより、キーリングプラグインからキーリングコンポーネントへのキー移行が可能になります。これにより、MySQLインストールをキーリングプラグインからキーリングコンポーネントに簡単に移行できます。新しいmysql_migrate_keyringユーティリティを使用すると、1つのキーリングコンポーネントから別のキーリングコンポーネントへのキーの移行が可能になります。キーリングコンポーネントからキーリングプラグインにキーを移行するためのプロビジョニングはありません。

 既存のキーリングプラグインは、ユーザーが見ることができるという特性を変更せずに引き続き使用できますが、その実装はコンポーネントインフラストラクチャを使用するように改訂されました。これは、プラグインとコンポーネントサービスAPIの間のブリッジとして機能するdaemon_keyring_proxy_pluginという名前の組み込みプラグインを使用して容易になります。

■ オプティマイザ関連

● MySQLクエリオプティマイザは、派生テーブルの最適化を相関スカラーサブクエリに適用できるようになりました。これは、追加のグループ化を適用した後、リフトされた述部に外部結合を適用することによって行われます。例えば、SELECT * FROM t1 WHERE (SELECT a FROM t2 WHERE t2.a=t1.a) > 0などのクエリは、SELECT t1.* FROM t1 LEFT OUTER JOIN (SELECT a, COUNT(*) AS ct FROM t2 GROUP BY a) AS derived ON t1.a = derived.a WHERE derived.a > 0と書き換えることができます。

 サブクエリにすでに明示的なグループ化がある場合、MySQLは既存のグループ化リストの最後に追加のグループ化を追加します。

 MySQLはカーディナリティチェックを実行してサブクエリが複数の行を返さないことを確認し、返す場合はER_SUBQUERY_NO_1_ROWを発生させます。チェックは、リフトされた述部の評価前に、書き換えられたクエリのWHERE句またはJOIN句の評価の一部として実行されます。

■ パッケージ関連

● バンドルされたlibeditライブラリはバージョン 20190324-3.1にアップグレードされました。(バグ #32433089)

● システムcurlライブラリにリンクするのではなくcurlを含むバイナリパッケージは、curl 7.74.0を使用するようにアップグレードされました。

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

● 互換性のない変更:パフォーマンススキーマsetup_instrumentsテーブルのインストゥルメンテーションが次のように改訂されました:

  ・データディクショナリインフラストラクチャとオブジェクトに割り当てられたメモリを説明するための新しいメモリインストゥルメントがあります。
    memory/sql/dd::infrastructure
    memory/sql/dd::objects

  ・一部のインストゥルメントは、インストゥルメントの命名の統一性を向上させるために名前が変更されました。影響を受けるインストゥルメント名は、C++名前空間と同じスタイルのキープレフィックスを使用してグループ化されます。例えば、エラー関連のインストゥルメントはerror::プレフィックスを使用し、パーティション関連のインストゥルメントはPartition::プレフィックスを使用します。次の表に、影響を受けるインストゥルメントを示します。

   旧インストゥルメント名 - 新インストゥルメント名
   debug_sync_control::debug_sync_action - THD::debug_sync_action
   errmsgs - errmsgs::server
   handler::errmsgs - errmsgs::handler
   handlerton - handlerton::objects
   log_error_loaded_services - log_error::loaded_services
   log_error_stack - log_error::stack
   LOG_name - LOG::file_name
   MDL_context_backup_manager - MDL_context::backup_manager
   Partition_admin - Partition::admin
   Partition_share - Partition::share
   partition_sort_buffer - Partition::sort_buffer
   partition_syntax_buffer - Partition::syntax_buffer
   Prepared_statement_map - Prepared_statement::infrastructure
   prune_partitions::exec - Partition::prune_exec
   Recovered_xa_transactions - XA::recovered_transactions
   thd::main_mem_root - THD::main_mem_root
   XID - XA::transaction_contexts

   さらに、サーバーインストゥルメントはservers_cacheの複製であり、削除されました。

   古いまたは削除されたインストゥルメント名を使用するアプリケーションは、この変更を考慮して調整する必要があります。

  ・いくつかのインストゥルメントには、DOCUMENTATION列に値が指定され(NULLではなくなりました)、実行時のインストゥルメンテーションドキュメンテーションの可用性が向上しました。

■ プラガブル認証

● 新しいcaching_sha2_password_digest_roundsシステム変数を使用すると、パスワードを保存するためのcaching_sha2_password認証プラグインが使用するハッシュラウンドの数を設定できます。

■ セキュリティ関連

● OpenSSLライブラリがバンドルされているプラットフォームの場合、MySQLサーバー用のリンクされたOpenSSLライブラリがバージョン 1.1.1kに更新されました。新しいOpenSSLバージョンで修正された問題については、以下で説明されています:
 https://www.openssl.org/news/cl111.txt および
 https://www.openssl.org/news/vulnerabilities.html
 (バグ #32680637)

■ 空間データサポート

● 新しいST_LineInterpolatePoint()関数およびST_LineInterpolatePoints()関数は、LineStringジオメトリの始点と終点の間で補間された単一の点または複数の点を返します。新しいST_PointAtDistance()関数は、LineStringジオメトリに沿って指定された距離の単一のポイントを返します。

 新しいST_Collect()集計関数は、複数のジオメトリ引数を取り、それらから単一のジオメトリコレクション値を生成します。

 CAST()関数およびCONVERT()関数は、1つの空間タイプから別の空間タイプへのジオメトリ値のキャストをサポートするように拡張されました。

■ 追加・変更された機能

● InnoDB:AUTOEXTEND_SIZEの最大設定が64Mから4GBに増やされました。MySQL 8.0.23で導入されたAUTOEXTEND_SIZEオプションは、テーブルスペースがいっぱいになった時にInnoDBがテーブルスペースのサイズを拡張する量を定義します。このオプションは、CREATE TABLE、ALTER TABLE、CREATE TABLESPACE、ALTER TABLESPACEステートメントでサポートされています。(バグ #32438606)

● Microsoft Windows:WindowsでMSVCを使用する時に、mysql-test-run.plスクリプトによって呼び出される全てのテストを実行するために必要な時間を短縮するために、/ RTC1コンパイラフラグがデバッグコンパイラフラグから削除されました。当初、このコンパイラフラグはCMakeプログラム(デフォルトではデバッグビルド用)で導入され、関数呼び出し周辺のスタックの破損と実行時の初期化されていない変数の使用をテストするコードを生成しました。/RTC1コンパイラフラグを削除しても、バグ検出のロスはありません。スタックの破損などのメモリエラーは、アドレスサニタイザー(ASAN)のテストで見つかる可能性が高く、初期化されていない変数の使用はコンパイラの警告で検出されます。(バグ #32525732)

● Microsoft Windows:named_pipe_full_access_groupシステム変数がデフォルトで空の文字列('')になり、名前付きパイプ接続が安全になりました。以前は、'*everyone*'がデフォルト値でした。有効なWindowsローカルグループ名で置き換えることができます。

● 新しいclone_donor_timeout_after_network_failureクローンプラグイン変数は、ドナーが受信者にネットワーク障害の後に再接続してクローン作成操作を再開することを許可する時間を定義します。タイムアウトは以前は5分に修正されていました。タイムアウトは最大30分に延長されることが可能になり、ネットワークの問題を解決するための時間を増やすことができるようになりました。

● クライアントアプリケーションとテストスイートプラグインは、文字セット名を書き込む時にutf8ではなくutf8mb3を報告するようになりました。(バグ #32164079、バグ #32164125)

● 入ってくるグループ通信システム接続を受け入れることができるホストのグループレプリケーションの許可リストは、グループレプリケーションの実行中に更新できるようになりました。したがって、グループレプリケーションを停止して再起動する必要なしに、許可リストによって制御されるグループに新しいメンバーを追加できます。allowlistは、各グループメンバーのgroup_replication_ip_allowlistシステム変数によって指定されます。

● --skip-slave-startコマンドラインパラメータは、レプリカサーバーの再起動時にレプリケーションI/OスレッドとレプリケーションSQLスレッドが開始されないようにするために使用されます。ただし、コマンドラインまたはmy.cnfオプションファイルでのパラメータの使用には、サーバーホストへのログインアクセスが必要になる場合があります。MySQLサーバーの権限構造を使用してこの機能にアクセスできるようするために、skip_slave_startシステム変数が提供されています。これにより、データベース管理者はオペレーティングシステムへの特権的なアクセスを必要としません。新しいグローバルシステム変数は読み取り専用であり、SET PERSIST_ONLYステートメントを使用して設定できます。システム変数として、その値をMySQLクライアントから照会し、MySQL APIで使用することもできます。--skip-slave-startコマンドラインパラメータは引き続き代替として使用でき、新しいグローバルシステム変数を設定します。

■ 主なバグ修正

● 重要な注意:utf8mb3照合がCREATETABLEステートメントで指定された場合、
SHOW CREATE TABLE、DEFAULT CHARSET、文字セット名を含むシステム変数の値、およびバイナリログは全て、その後、utf8mb4の同義語になりつつあるutf8として文字セットを表示しました。そのような場合、代わりにutf8mb3が表示され、CREATE TABLEは次の警告を発するようになりました:'collation_name' is a collation of the deprecated character set UTF8MB3。代わりに、適切な照合でUTF8MB4を使用することを検討してください。(バグ #27225287、バグ #32085357、バグ #32122844)

 参照:バグ #30624990。

● InnoDB:buf_page_create()関数で検出された古いページが解放され、その後再初期化されずにディスクから再度読み取られました。(バグ #32622548)

● InnoDB:MySQL 8.0.23で、バッファプールページのC++ Enum型の値とInnoDBソースコードのバッファプールブロックのデータ構造がintからuint8_tに変更されたために、データが
メッセージやINFORMATION_SCHEMAテーブルなどの様々な出力で整数ではなくASCII文字として出力されました。

 INNODB_BUFFER_PAGE_LRUテーブルにデータを追加する関数は、IO_FIXフィールドのIO_PIN状態を出力しませんでした。(バグ #32575469)

● InnoDB:1つのインデックスツリー永続カーソルの位置を別のインデックスツリーにコピーするbtr_pcur_t::copy_stored_position関数は、不要なfree呼び出しとmalloc呼び出しを実行しました。(バグ #32574835)

● InnoDB:テーブルのロックをチェックする関数が、排他ロックシステム(lock_sys)ラッチを取得しようとしたため、セマフォの待機時間が長くなりました。(バグ #32545030)

● InnoDB:一時テーブルスペースを開いているファイルとしてカウントすることにより、innodb_open_filesの制限を超え、他のファイルを開くことができなくなりました。開いているファイルをカウントする時に、一時テーブルスペースは無視されるようになりました。(バグ #32541241)

● InnoDB:buf_flush_ready_for_flush()関数は、ページがダーティであるかI/Oが修正されているかを最初にチェックせずに、古いページをフラッシュする準備ができていると識別するため、アサーションエラーを引き起こしました。(バグ #32530147)

● InnoDB:生成された列を変更したトランザクションのロールバックにより、アサーションエラーが発生しました。外部に保存された列が占めるスペースを解放しようとした時にエラーが発生しました。外部に保存された列を含む更新ベクトルは、生成された列を考慮しませんでした。(バグ #32529561)

● InnoDB:innodb_validate_tablespace_pathsを無効にしてサーバーを起動すると、起動プロセスの初期段階で一時的に非アクティブに設定された、ユーザーが作成したUNDOテーブルスペースが再アクティブ化されませんでした。(バグ #32493885)

● InnoDB:innodb_extend_and_initializeを無効にすると、InnoDBはテーブルスペースファイルにスペースを割り当てる時にfallocate()を使用するため、挿入指向のワークロードのパフォーマンスが低下しました。(バグ #32437020)

● InnoDB:不要なフルフラッシュリストスキャンが削除され、セッション一時テーブルスペースの作成速度が向上しました。以前は、バッファプールのサイズとダーティページの数によっては、セッション一時テーブルスペースの作成に時間がかかり、書き込みトランザクションのパフォーマンスに影響を与える可能性がありました。(バグ #32423860)

● InnoDB:指定されたページタイプが有効かどうかをチェックする関数は、UNDOテーブルスペースの有効だが未定義のページタイプをテストする時にアサーションを発生させました。(バグ #32366301)

● InnoDB:シャード読み取り/書き込みロック機能のインストルメンテーションが改善されました。(バグ #32333168)

● InnoDB:Windowsで、COMPRESSIONオプションを使用してテーブルを作成すると、InnoDBは、同じシステムコールによって設定されたパンチホールサポートフラグをチェックする前に、そのシステムコールのエラーステータスをチェックできませんでした。そのため、初期化されていないフラグが読み取られました。(バグ #32322645)

● InnoDB:MySQL 5.6で作成されたジオメトリ列は、MySQL 5.7で導入されたジオメトリタイプの変更により、MySQL 5.7からMySQL 8.0へのアップグレード後にサーバーを再起動するとエラーを引き起こしました。(バグ #32299738)

● InnoDB:リカバリ中、複数のレコードグループのミニトランザクションのログレコードが2回解析されました。2回目のパスを回避するために、最初の解析操作からのログレコードが保存されるようになりました。これにより、リカバリのパフォーマンスが向上します。

● InnoDB:デバッグビルドで、セカンダリインデックスの終了範囲条件チェックでアサーションエラーが発生し、Valgrindテストは初期化されていない値を読み取る仮想列のセカンダリインデックスの終了範囲条件チェックを明らかにしました。(バグ #32291506)

● InnoDB:innodb_log_writer_threads変数を無効にすると、1つのスレッドによる大量のログ書き込みが、他のスレッドのログフラッシュの機会をブロックする可能性があります。(バグ #32255538)

● InnoDB:SHOW ENGINE INNODB STATUSデッドロック情報で、単一のrw-lockリーダースレッドが共有ラッチを保持している場合、リーダースレッドIDは出力されませんでした。(バグ #32252477)

● InnoDB:同じテーブルでSHOW CREATE TABLE操作とALTER TABLE操作を同時に実行すると、アサーションエラーが発生しました。SHOW CREATE TABLEスレッドは、ALTER TABLE操作によって古くなっていたテーブルスペースオブジェクトを参照していました。(バグ #32235621)

● InnoDB:MySQL 5.7にシャードrw_lock_statsカウンターが導入されたため、CPUキャッシュ効率が低下しました。MySQL 5.7のこの問題に対処するために、シャーディング方法が変更されました。最適なパフォーマンスを実現するために、MySQL8.0ではrw_lock_statsカウンターは削除されています。(バグ #32225367)

● InnoDB:Windowsでは、並列読み取りスレッドの数がマシンコアの数を超えた同時SELECT COUNT (*)クエリが原因でストールが発生しました。(バグ #32224707、バグ #101789)

● InnoDB:バッファプールページが古くなっているかどうかを示すIS_STALE列が、INFORMATION_SCHEMA.INNODB_BUFFER_PAGEテーブルに追加されました。(バグ #32194434)

● InnoDB:デバッグビルドで、ダーティページでラッチを保持する時にログに使用可能なスペースがあることを確認するREDOログコードのlog_free_check()関数は、現在のスレッドによって開かれたミニトランザクションのリストを使用して潜在的な制約違反を検索するようになりました。(バグ #32189367)

● InnoDB:64kのInnoDBページサイズと初期のUNDOテーブルスペースサイズよりも小さいinnodb_max_undo_log_size設定を持つシステムでのスローシャットダウン中に、2つのUNDOテーブルスペースがエンドレスループで切り捨てられました。UNDOテーブルスペースの切り捨ては、初期のUNDOテーブルスペースサイズおよびinnodb_max_undo_log_size設定よりも大きいUNDOテーブルスペースに制限されるようになりました。

 UNDOテーブルスペースの次のREDOロールバックセグメントを取得する機能が変更され、非アクティブなテーブルスペースが見つかった時に、UNDOログが2つのアクティブなUNDOテーブルスペースに均等に分割されるようになりました。(バグ #32173457)

● InnoDB:undo_001 UNDOテーブルスペースが切り捨てられている時に予期しない停止が発生した後、サーバーをアップグレードモードで起動すると、エラーが発生しました。アップグレード処理が完了してシャットダウンが開始された時、UNDOの切り捨てが必要かどうかを決定する関数は、undo_001 UNDOテーブルスペースを見つけることができませんでした。この問題に対処するために、サーバーをアップグレードモードで起動する時に、UNDOテーブルスペースの切り捨てが実行されなくなりました。(バグ #32127912)

● InnoDB:インデックス付き仮想列とインデックス付き外部キー制約列を持つ子テーブルでカスケード更新を開始した親テーブルでの削除操作により、仮想列の破損が発生しました。(バグ #32124113)

● InnoDB:テーブル共有インスタンス(m_shareオブジェクト)とディクショナリテーブルインスタンスのオープンとクローズのシーケンスは、古くなったディクショナリインデックスを指す可能性のある古いm_shareオブジェクトにアクセスできないようにするために変更されました。

● InnoDB:サーバーの初期化の失敗に続いてサーバーの再起動が成功した後、TRUNCATE TABLE操作を発行すると、デバッグアサーションエラーが発生しました。(バグ #31763837)

● InnoDB:高速シャットダウン(innodb_fast_shutdown=0)により、アサーションエラーが発生しました。アサーションコードは、パージ操作を停止する前に、トランザクションリスト(mysql_trx_list)内のトランザクションをチェックします。このチェックは、トランザクションをトランザクションリストにまだ挿入しているGTID永続バックグラウンドスレッドをシャットダウンする前に行われました。(バグ #31693627)

● InnoDB:Undoテーブルスペースの切り捨てエラー処理が改善され、Windows固有のInnoDBファイル削除手順がよりPOSIX互換になりました。(バグ #31684783)

● InnoDB:4KのInnoDBページサイズでサーバーを初期化すると、“key too long”エラーがエラーログに書き込まれました。(バグ #31496943、バグ #99892)

● InnoDB:仮想列にインデックスを作成すると、無効なデバッグアサーションエラーが発生しました。(バグ #31279528、バグ #99421)

● InnoDB:デバッグモードで、buf_pool_validate_instance()関数がbuf_page_io_complete()関数のbuf_page_t::io_fixフィールドを変更していたスレッドと適切に同期せずに、buf_page_t::io_fixフィールドにアクセスしたため、アサーションエラーが発生しました。この問題の修正に加えて、buf_page_get_io_fix_unlocked()関数は、特定の値に関してbuf_page_t::io_fixフィールドをテストするいくつかの特定の関数に置き換えられました。他の一連の小さな関連コードの変更も実装されました。(バグ #31027553)

● InnoDB:TempTableメモリアロケータは、特定のセッションで異なるクエリで共有されるメモリブロックを割り当てる時に、RAM消費を追跡しませんでした。そのため、temptable_max_ramの制限に従わない可能性がありました。(バグ #29890126)

● パーティショニング:ALTER TABLEステートメントで無効なPARTITION句が正しく処理されない場合がありました。(バグ #32235085)

● レプリケーション:行ベースのレプリケーションが使用されている場合(binlog_format=ROW)、行の他のフィールドが挿入または更新された時に、レプリカにのみ存在する保存された生成列が更新されいませんでした。これらの列は、行イメージが解凍された時に評価されるようになり、それらの値は適用される前に行イメージで更新されるようになりました。(バグ #32292413、バグ #101978)

● レプリケーション:行イベントに非圧縮データを含むBLOB列が含まれていて、行イベントの圧縮サイズがその非圧縮サイズよりも大きい場合、バイナリログトランザクションの圧縮が続行できませんでした。この関数は、追加の圧縮後バイトを正しく処理するようになりました。(バグ #32174715、バグ #101611)

● レプリケーション:以前の全てのバイナリログファイルがその保持期間が終了したために起動時に削除された場合、新しいバイナリログファイルには空のPrevious_gtidsイベントが含まれ、レプリケーションでエラーを引き起こす可能性がありました。初期化の順序が変更され、以前のGTIDセットが起動時に作成された新しいバイナリログファイルに書き込まれた後にのみ、以前のバイナリログファイルがパージされるようになりました。(バグ #32134875、バグ #101533)

● レプリケーション:MySQLサーバーがセット内のGTIDの数をカウントすると、戻り値がラップされ、誤った結果が返される可能性がありました。これは、リモートクローニング操作がより効率的だった時に、グループレプリケーションの分散リカバリにバイナリログからの状態転送を使用するという誤った決定につながる可能性があります。このロジックは修正されました。(バグ #32086209)

● レプリケーション:バイナリログファイルがその保持期間が終了したために起動時に削除された場合、失われたGTIDに関連するデバッグビルドでアサーションが発生しました。 (バグ #32008512、バグ #101137)

● レプリケーション:sql_slave_skip_counterシステム変数は、指定された数のトランザクションをレプリカにスキップさせるために使用され、バイナリログトランザクション圧縮(binlog_transaction_compressionシステム変数を使用してアクティブ化)を使用して圧縮されたトランザクションペイロードを無視しました。圧縮されていないトランザクションペイロード内のイベントのみが、スキップされた合計にカウントされました。(バグ #31973055)

● レプリケーション:システム変数が更新され、様々なクライアントによって読み取られている時に、バイナリログファイルがローテーションされた場合、デッドロックが発生する可能性がありました。(バグ #31774422)

● レプリケーション:レプリカのSQLスレッドのSHOW PROCESSLISTステートメントの出力は、レプリカが実際にキャッチアップされた時に最後のクエリを現在適用されているものとして表示することがありました。(バグ #30521198、バグ #97560)

● Microsoft Windows:32を超える論理プロセッサを搭載したWindowsシステムでMySQLサーバー(64ビット)を実行し、リソースグループのVCPU属性を30より大きな値に設定すると、誤ったCPUマスク値が生成されました。この値は、スレッドアフィニティの設定に使用されます。これらの条件下で、MSVCコンパイラは、thread_attrs_api_win.ccファイルで32ビットシフトが暗黙的に64ビットに変換されたという警告を報告しました。変換の結果、32を超える論理プロセッサを搭載したシステムで誤ったCPUマスク計算が発生しました。この修正により、シフトの引数1を1LLに置き換えることによって、CPUマスクを計算する時に64ビットシフトが使用されるようになります。(バグ #32079726)

● JSON:IF()関数は、最初の引数からエラーが発生した時に、デバッグビルドでアサーションをヒットすることがありました。これは、関数の戻り型がJSONであるという追加の条件で、同様の状況で発生する可能性もあります。(バグ #32231393、バグ #32231620)

● JSON:多くのJSON関数がエラーを正しく伝播しなかったため、デバッグビルドでアサートエラーが発生する可能性がありました。(バグ #32047630)

● JSON:トリガー内のJSON_TABLE()は、別のセッションで再利用された時に誤って処理されることがありました。JSON_TABLE()とその一時テーブルが現在のセッションのコンテキストで処理されるようにすることで修正されました。(バグ #31644193)

● JSON:JSON_SEARCH()関数が、実際のエンコーディングに関係なく、全ての検索文字列とパス値をutf8mb4文字列として解釈したため、誤った結果が生じる可能性がありました。(バグ #102443、バグ #32443143)

● JSON:一部のMySQL JSON関数は、左結合で使用されると、内部結合が元の左結合と同等でなかったとしても、オプティマイザーにそれを内部結合に変換させる場合がありました。これは、引数の1つがNULLであっても、それらがNULLではない値を返すという事実によるものであり、オプティマイザーはそれらにNULL入力に対してNULLを返すことを期待していました。

 この問題の影響を受ける関数には、JSON_ARRAY()、JSON_OBJECT()、JSON_ARRAY_APPEND()、JSON_ARRAY_INSERT()、JSON_INSERT()、JSON_REPLACE()、およびJSON_SET()が含まれます。(バグ #101861、バグ #32248705)

● 汎用Linux用のコミュニティパッケージは、必要なLDAP/SASL/Kerberos依存関係を使用して構築されておらず、関連する必要なライブラリをバンドルしていませんでした。 (バグ #32619858)

● 関数BIT_AND()、BIT_OR()、BIT_XOR()、およびJSON_ARRAYAGG()は、常に適切なエラー処理を提供するとは限りませんでした。(バグ #32594813)

● INがUNIONで誤って使用された場合、サーバーは常に適切なエラーメッセージを提供するとは限りませんでした。(バグ #32593846)

● 結果にItem_typecast_signedのメタデータが示すよりも多くの桁が含まれている時、DECIMALから符号付き整数型へのキャストでアサーションがヒットする可能性がありました。これは、整数に変換される時に10進値が丸められ、Item_typecast_signedが、9.9を10に丸める場合など、丸めによって10進値の整数部分の桁数が増える可能性があることを考慮していなかったために発生しました。

 これは、キャストの結果の最小最大長を計算しようとしたロジックを削除し、代わりに親クラスItem_int_funcによって設定されたデフォルトを使用することで修正されています。そのデフォルトは64ビット整数の最大幅であり、入力値に関係なく安全である必要があります。(バグ #32591589)

 参照:この問題は、バグ #32371039のリグレッションです。

● 名前my_row_idは、非表示の列には許可されていません。この制限は解除されました。(バグ #32586231)

● 多数の同時接続があるシステムでは、grantステートメントの実行はメタデータロックの待機に非常に長い時間がかかり、サーバーが応答しなくなる可能性がありました。(バグ #32483597)

● Windowsのバイナリとライブラリが適切に署名されていませんでした。(バグ #32458533)

● INFORMATION_SCHEMAテーブルの権限チェックでは、lower_case_table_names値を考慮に入れることができない場合がありました。(バグ #32448364)

● ESCAPEが定数値を参照しなかったLIKE ... ESCAPEは、プリペアドステートメント内で正しく処理されませんでした。(バグ #32446728)

● MySQLは従来、LIKEのESCAPE句(つまり、ESCAPE '')の空の値を“no escape character”として解釈してきました。そのような場合の空の値が、バックスラッシュ(\)をエスケープ文字として使用する必要があることを意味すると解釈され、期待される動作が損なわれたため、LIKEの最初の2つの引数のいずれかがマルチバイト文字セットを使用する文字列である場合、問題が発生する可能性がありました。

 この修正により、LIKEはESCAPE ''を文字セットに関係なくエスケープ文字がないことを意味するものとして解釈し、以前の予想される動作が復元されています。

 さらに、指定されたエスケープ文字をターゲット文字セットに変換できない場合にエラーが発生するようになりました。これは、バックスラッシュをエスケープ文字として使用することに静かにフォールバックするという、このような場合の元の動作に優先します。(バグ #32446508)

● WindowsパッケージはOpenSSLの脆弱性の影響を受けました。(バグ #32431519)

● ウィンドウ関数またはサブクエリを含むユーザー定義関数の引数は、予期しない結果を生成する可能性がありました。(バグ #32424455)

● ストアドプロシージャ内のカーソルに使用される一時テーブルの不適切な処理は、予期しないサーバーの動作を引き起こす可能性がありました。(バグ #32416811)

● ソースでシンボルTRUEを使用すると、一部のプラットフォームでビルドが失敗しました。これはtrueに置き換えられました。(バグ #32406197、バグ #102308)

● ユーザーがINFORMATION_SCHEMA.VIEWS表のビュー定義を表示できるかどうかを判別するために使用される権限チェックが正しく機能しませんでした。(バグ #32405811)

● 再帰的な共通テーブル式の場合、メモリ内の一時テーブルをディスク上に変換する必要が生じた場合に、アサーションが発生する可能性がありました。(バグ #32404597)

● ユーザー作成関数を使用するプリペアドステートメントは、関数が引数を取らない場合、正しく処理されませんでした。(バグ #32404542)

● クローンプラグインのインストールに失敗すると、その後のインストールの試行が失敗する可能性がありました。(バグ #32402158、バグ #102240)

● 時間列タイプで使用される一部の内部関数は、YEAR値の適切な処理を提供しませんでした。(バグ #32395335)

● 内部定数のMAX_FLOAT_STR_LENGTH = 12およびMAX_DOUBLE_STR_LENGTH = 22は、それぞれFLOAT値およびDOUBLE値を表す文字列の最大長を表します。科学的記数法を使用するかどうかを決定するために変換ルーチンmy_gcvtによって採用されたヒューリスティックは、これらより長い文字列を生成することがありました。

 これらの長い文字列は、実際の長さが予想される最大値を超える可能性があったため、一部の文字列変換ルーチンで問題を引き起こしました。文字列コンテキストでFLOATまたはDOUBLEをフェッチする度に、my_gcvtに希望の長さを明示的に指示することで、これを修正します。(バグ #32385934)

● トリガー内で、引数なしでRAND()を使用すると、予期しないサーバーの動作が発生する可能性がありました。(バグ #32372805)

● リモートクローニング操作後、受信側のMySQLサーバーインスタンスでテーブルスペースの欠落エラーが報告されました。ドナーインスタンスでinnodb_validate_tablespace_paths変数が無効になっているため、テーブルスペースがクローン化されませんでした。その結果、関連するテーブルスペースオブジェクトがロードされませんでした。全てのテーブルスペースオブジェクトがロードされていることを確認するために、クローニング操作の前にチェックが実行されるようになりました。 (バグ #32354908、バグ #102137)

● 多数のEXISTSサブクエリを含む一部のクエリブロックは、常に正しく処理されるとは限りませんでした。(バグ #32343143)

● SHOW CREATE TABLEステートメントが失敗した場合、mysqlpumpが予期せず終了する可能性がありました。(バグ #32340208)

● ドナーMySQLサーバーインスタンスのwait_timeout設定が低いため、長時間実行されているリモートクローニング操作が失敗しました。ドナースレッドは、クローンプロトコルコマンドをリッスンする時にMySQLサーバーのwait_timeout設定を使用します。wait_timeout設定が低いドナーインスタンスでのタイムアウトエラーを回避するために、クローンアイドルタイムアウトがデフォルトのwait_timeout設定である28800秒(8時間)に設定されるようになりました。クローンネットワークの読み取りおよび書き込みのタイムアウト値も増やされました。(バグ #32340112、バグ #102097)

● サーバーで実行されているレプリケーションスレッドは、パフォーマンススキーマスレッドテーブルには表示されていましたが、variables_by_threadテーブルまたはstatus_by_threadテーブルには表示されませんでした。現在スレッドは3つのテーブル全てに表示されます。(バグ #32335496、バグ #102115)

● クエリ文字列が、書き換えられる前に表示されました。(バグ #32335263、バグ#32628376)

● libeditライブラリを使用してコンパイルされたビルドの場合、mysqlクライアントが--default-character-set=utf8オプションを指定して呼び出された場合、libeditはマルチバイト文字の入力を拒否しました。(バグ #32329078、バグ #32583436、バグ#102806)

● Windowsでは、結果セットが大きいと、mysqlクライアントが予期せず終了する可能性がありました。(バグ #32316323、バグ #102051)

● 繰り返し実行するためのクエリ式の準備は、準備中にエラーが発生した場合にアサーションを発生させる可能性がありました。(バグ #32291841)

● 関数インデックスの作成では、大文字と小文字が区別されないため、列名が処理されませんでした。(バグ #32287186、バグ #101994)

● ステートメントの実行中にトリガーにバインドされた一時テーブルが、予期しないサーバーの終了を引き起こす可能性がありました。(バグ #32267749、バグ #32288089、バグ #32299045)

● 10進値を含む計算でのNULLおよびエラーの処理が改善されました。(バグ #32258228、バグ #32497850)

● スキーマが読み取り専用に変更された時に、スキーマ内のテーブルへのオープンハンドラーがあった場合、アサーションが発生しました。(バグ #32248313)

● パフォーマンススキーマのreplication_group_membersテーブルから選択すると、Error 1267 Illegal mix of collations ...が発生する場合がありました。これは、MySQL 8.0.22の列値とシステム変数の比較の処理の変更が原因でした。(バグ #32244631)

 参照:バグ #32501472、バグ #32579184。

● MySQLは、整数値を返す多数の時間関数に対して無効なメタデータを生成しました。これらの関数には、TO_DAYS()、PERIOD_DIFF()、PERIOD_ADD()、TO_SECONDS()、DAYOFMONTH()、DAYOFYEAR()、HOUR()、およびMINUTE()などが含まれていました。(バグ #32239578)

● 非表示の列のみを取得する自然結合のテーブルサブクエリは正しく処理されませんでした。(バグ #32235285)

● デバッグビルドの場合、ALTER TABLEを使用してDEFAULT値がTRUEである列を設定すると、アサーションが発生します。(バグ #32235058)

● インデックス条件プッシュダウンを使用してストレージエンジンにプッシュダウンされた条件の評価中にエラーが発生した時、ストレージエンジンはエラーを無視し、成功を示すエラーコードを返すことがありました。これにより、後でアサーションエラーが発生する可能性がありました。

 現在、このような場合には、必ずエグゼキュータがエラーが発生したことを検出し、その時点で実行を停止します。(バグ #32234773)

● バイナリロギングが無効になっているデバッグビルドの場合、無効なDEFAULT値を指定したALTER TABLE ... MODIFY COLUMNでアサーションが発生しました。(バグ #32234194)

● 集計関数の準備は、その関数が定数スカラーサブクエリを引数として取り、そのスカラーサブクエリがエラーを発生させた場合に、デバッグビルドでアサーションにヒットすることがありました。(バグ #32231698)

● デバッグビルドの場合、集約コンテキストで評価されたNULLIF()の不適切な文字セット処理により、アサーションが発生しました。(バグ #32231557)

● サポートされていないKEY_BLOCK_SIZE値を持つCREATE TABLEステートメントがアサーションを発生させました。(バグ #32227101)

● 非常に多くのテーブルを持つMySQLインスタンスをアップグレードすると、過剰な量のメモリが消費されました。可能性があるアップグレードのためのデータディクショナリエンティティを分析するために割り当てられたメモリは、全てのエンティティが処理されるまで解放されませんでした。(バグ #32226180、バグ #101818)

● 同じテーブルで長時間実行されているクエリと同時にテーブルでANALYZE TABLEを実行すると、そのテーブルに対する後続のクエリは長時間実行されているクエリの終了を待ちました。現在、ANALYZE TABLEによって引き起こされるこの待機はなくなり、後続のクエリを待機なしで実行できるようになりました。(バグ #32224917)

● ESCAPE句を含むLIKE式を使用するステートメントは、常に正しく処理されるとは限りませんでした。(バグ #32213959)

● ARMプラットフォームでは、ビルドプロセス中に使用されるユーティリティでアサーションが発生する可能性がありました。(バグ #32209415)

● InnoDBは、テーブルパーティションの一部の正式な名前を常に正しく処理するとは限りませんでした。(バグ #32208630)

● explicit_defaults_for_timestamp変数を無効にすると、クローンプラグインのインストールがPFSテーブルの作成エラーで失敗しました。変数の設定により、クローンパフォーマンススキーマテーブルのTIMESTAMP列がNOT NULL列として誤って作成されていました。(バグ #32199611)

● SHOW CREATE VIEWは、ROLLUP句で作成されたビューに対して無効な構文を生成しました。この問題は、SHOW CREATE VIEWを使用するmysqldumpにも影響しました。(バグ #32197353、バグ #101740)

● SECONDARY_ENGINE_ATTRIBUTEを指定したCREATE TABLEまたはALTER TABLEが失敗すると、メモリリークが発生する可能性がありました。(バグ #32187507)

● 接続の確立に失敗すると、サーバーが開いている接続の数を誤ってカウントする可能性がありました。(バグ #32156518)

● MySQL 8.0.19で行われたリファクタリング作業は、IFNULL()などの関数を使用した列に対する左結合を正しく処理しませんでした。(バグ #32141711)

 参照:この問題は、バグ #30320525のリグレッションです。

● オプティマイザは、スキップスキャンが適用できない後方インデックススキャンに対してもスキップスキャンを使用することを選択でき、その結果、予測できないサーバーの動作が起こりました。(バグ #32127290)

● ウィンドウ関数が準備プロセスのかなり遅い段階で設定されるにもかかわらず、ウィンドウ関数を含むUDF関数の引数が準備時に評価されました。現在、これらの評価は、サブクエリを含むUDF引数に関してこれが実行される方法と同様に、実行時間まで遅延されます。(バグ #32122078、バグ #32393265)

● 一定でないデフォルト式を持つ列を含むテーブルを作成すると、後続のALTER TABLEステートメントが失敗しました。(バグ #32121425、バグ #101486)

● より大きなBLOBのような列の値でBLOBのような列を更新すると、更新された列が間違ったサイズになり、ゼロになる場合もありました。(バグ #32112403)

● グループレプリケーションのパフォーマンススキーマ統計が別のクライアントによって照会されている時に、STOP GROUP_REPLICATIONステートメントがグループメンバーを停止するために使用されると、競合状態が発生する可能性がありました。現在は、グループレプリケーションにより、STOP GROUP_REPLICATIONステートメントとパフォーマンススキーマクエリが同時に実行されなくなりました。(バグ #32100147)

● 内部キューのロックが不適切な場合、mysqlpumpが予期せず終了する可能性がありました。(バグ #32067013)

● サーバーは、ORDER BY句を指定したSELECTに対してGROUP_CONCAT()を使用してステートメントを常に正しく準備するとは限りませんでした。(バグ #32053547、バグ #31947466)

● sysスキーマのcreate_synonym_db()プロシージャは、INFORMATION_SCHEMAシノニムの作成に失敗します。(バグ #32050275、バグ #101258)

● ウィンドウ関数で発生するエラーは常に正しく伝播されるとは限らず、デバッグビルドでアサーションエラーが発生する可能性がありました。(バグ #32028154)

● グループレプリケーションが停止している時に、group_replication_applierチャネルに対してSTART REPLICA SQL_THREADステートメントとSTOP REPLICASQL_THREADステートメントを使用できるようになりました。これにより、オペレーターは、サーバーをグループに再参加させることなく、グループを離れたサーバーに残っている未適用のトランザクションを適用できます。(バグ #32027612、バグ #32414767)

● 別のスレッドによって開始されたトランザクションでXA COMMITを呼び出すと、アドレスサニタイザーの警告が発生する可能性がありました。(バグ #32025408)

● mysqlクライアントがバッチモードで使用された時に、そのパーサーは、USEデータベース名が引用されると、USEとそれに続くDROP DATABASEによって混乱する可能性がありました。(バグ #32015466、バグ #101124)

● MySQL 8.0.17での変更により、comp_errの速度が大幅に低下しました。通常のパフォーマンスが復元されました。(バグ #32014733)

 参照:この問題は、バグ #29781631、バグ #95377のリグレッションです。

● INSERTステートメントのDATE値またはDATETIME値でCAST()を使用すると、"0000-00-00"および"2000-02-31"に対して警告が発生しましたが、"2000-01-00"または"2000-00-01"に対しては発生しませんでした。現在は、これらの各ケースでも警告が表示されます。(バグ #32013612)

● CHANGE MASTER TOステートメントのMASTER_COMPRESSION_ALGORITHMS値の最大長が正しくチェックされていませんでした。(バグ #32008597)

● 動的パラメーターをYEARにキャストする場合(PREPARE s FROM "SELECT CAST(? AS YEAR)"など)、型の伝播が実行されなかったため、パラメーターが使用されたプリペアドステートメントの実行が失敗しました。(バグ #32002844)

● MySQL 8.0にアップグレードされたMySQL 5.7インスタンスの一部のシステムテーブルの定義は、新しいMySQL 8.0インストールのシステムテーブルの定義とは異なります。(バグ#31989290)

● サブクエリを使用する一部のSHOWステートメントは、予期しないサーバー動作を引き起こす可能性がありました。(バグ #31853180)

● GROUP BY column HAVING column_expression IS [NOT] NULLを使用したクエリは正しい結果を返しましたが、WITH ROLLUPが追加された場合はそうではありませんでした。(バグ #31848191)

● SHOW ENGINE PERFORMANCE SCHEMA STATUSステートメントは、パフォーマンススキーマの誤ったメモリ使用量を報告しました。(バグ #31795132、バグ #100624)

● Visual Studio 2019を使用してエンティティデータモデルを生成しようとすると、エンティティフレームワークウィザードで一部のテーブルをインポートできませんでした。これは、UNIONからの列およびCASEやIF()などの関数または演算子からの列を処理する直交データ型集計に対して行われたMySQL 8.0.21の変更によるものです。これにより、このような場合に以前は処理される必要がなかったタイプENUMまたはSET型の値を返すことが可能になります。(バグ #31750645)

 参照:バグ #29698617。

● サブクエリのORDER BY句を最適化する際に、外部のSELECTで参照されているサブクエリツリーをクリーンアップする可能性があり、早期の終了につながる可能性がありました。(バグ #31721430)

● mysql.funcシステムテーブルの名前が正しくないと、サーバーが予期しない動作をする可能性がありました。(バグ #31674599)

● セッションが、独自の監査を無効にする可能性がありました。(バグ #31630954)

● GCCでプロファイルガイド最適化を使用するためのコンパイラオプションが改善され、必要に応じて-fprofile-partial-trainingおよび-fprofile-update=prefer-atomicが含まれるようになりました。(バグ #31450064、バグ #99781)

● performance_schema_max_thread_classesシステム変数およびperformance_schema_max_thread_instancesシステム変数をゼロに設定してサーバーを起動すると、MySQL Enterprise Firewallが新しいルールを作成できなくなりました。(バグ #31335080、バグ #24947654、バグ #83519)

● REDOログからのリカバリ中にnullポインターがインクリメントされたため、Undefined Behavior Sanitizer(UBSAN)ビルドでランタイムエラーが発生しました。(バグ #31173032、バグ #32428131)

● log_slow_extraシステム変数を有効にしてスロークエリログ出力にErrnoフィールドを追加すると、ステートメントが失敗した場合でもエラー番号は0でした。(バグ #30769965、バグ #98220)

● デバッグビルドでは、utf32文字セットを使用した特定の変換操作により、予期しないサーバー動作が発生する可能性がありました。(バグ #30746908)

● 存在しないパフォーマンススキーマテーブルからのSELECT ... FOR UPDATEは、ER_NO_SUCH_TABLEではなくER_TABLEACCESS_DENIED_ERRORを生成しました。(バグ #30701047、バグ #98068)

● ストアドプログラムのローカル変数の誤った取り扱いにより、予期しないサーバーの動作が発生する可能性がありました。(バグ #30366310)

● パフォーマンススキーマのmetadata_locksテーブルは、TRANSACTION期間に取得されたメタデータロックが後でRENAME TABLE操作によってEXPLICIT期間に変更された場合など、誤ったDURATION値を表示する可能性がありました。(バグ #30065213、バグ #96237)

● audit_logプラグインは、起動時に暗号化パスワードを生成した場合、暗号化パスワードの保存に失敗する可能性がありました。(バグ #29559793)

● プラグインをアンインストールすると、プリペアドステートメントのその後の実行に影響を与える可能性がありました。(バグ #29363867)

● 文字列値のユーザー定義変数または関数の結果をdoubleに変換(例えば、CAST()を使用)時、切り捨てが発生しても警告が出力されませんでした。(バグ #27969934、バグ #21943299)

● ビュー定義がESCAPE句とともにLIKEを使用した場合、ESCAPE句の内容が無視され、誤った結果が発生しました。(バグ #26086751)

● ascii文字セットを使用する文字列に不正なASCII値(7ビット範囲外)を挿入することが可能でした。これは現在禁止されています。(バグ #24847620)

● 設定値内でスペースやその他の特殊文字を使用できるようにするために、mysql_config_editorは、設定ファイルに書き込む値を二重引用符で囲み、値内で使用される二重引用符をエスケープするようになりました。(バグ #19953349、バグ #74691)

● 集約イテレータが行を検出しない場合、そのSELECTリスト内の各項目を呼び出して、これを通知します(例えば、COUNT(*)がそれ自体をゼロに設定できるように、または、SUM(foo)がそれ自体をNULLに設定できるように)。MySQL 8.0.22で内部作業が行われた後、誤って非表示のアイテムを呼び出す可能性もありました。二重にネストされたサブクエリを含む一部のクエリでは、そのような非表示アイテムの1つが独自の親サブクエリになる(また、MySQLのスカラーサブクエリがONLY_FULL_GROUP_BY以外のクエリに対して、この呼び出しの特別なレガシー処理を行う)可能性がありました。これは、サブクエリ全体に、本来ならそうすべきではなかった時にNULLを返させます。

 これは、MySQL 8.0.21以前のように、表示されているアイテムに対してのみ呼び出しを行うことで修正されています。(バグ #102101、バグ #32335256)

● パスにアクセスするための古いスタイルのプランを解釈する時、外部結合はキャッシュを無効にする必要があるnull補完行を生成する可能性があるため、LATERALのキャッシュ無効化は全ての外部結合が完了するまで遅延されました。外部結合にLATERALが含まれていて、かつ、そのLATERALが同じ外部結合内からのテーブルのみを参照している場合に、問題が発生しました。このような場合、無効化ツールは、我々が発行された行を見逃してしまい、キャッシュが誤って保持されないように、遅延せずにすぐに適用される必要があります。特に、これは、特定のインフォメーションスキーマテーブルが外部結合の右側にある場合に発生する可能性がありました。これは、これらがLATERALを使用して定義されたビューであるためです。

 我々が無効化されるマテリアライゼーションと同じ(外部)結合ネスト内に入るまで(それ以上はない)、無効化ツールの発行を遅らせることによって、これを修正しています。これは、テーブルの行が2つ以上の別々のマテリアライゼーション(一部は結合内にあり、一部は上位にある)を無効にする必要がある場合にも正しく対処します。(バグ #101460、バグ #32113029、バグ #32311147)

 参照:この問題は、バグ #98238、バグ #30766181のリグレッションです。

● オプティマイザトレースは、最大6文字の浮動小数点数を出力しました。これは、符号、小数点、および指数がこれらの文字の多くを使用できる場合、多くの値の精度が非常に低くなる可能性があったことを意味しました。これは、精度が1と低くなる可能性があり、そして、絶対値がDBL_MAXを超える値に丸められる可能性があり、そのためにJSONパーサーによって拒否される可能性がある大きな数の場合に特に問題でした。

 現在、このような数値は常に6の精度でオプティマイザトレースに出力されます(バグ#101457、バグ #32113020)

 参照:バグ #94672、バグ #29493604。

● Filesortは、降順列のインデックスが使用可能で使用されている時でも、ORDER BY ... DESC句を持つクエリに使用されました。これは、等式述部のフィールドが一致したためにORDER BY副節が削除されなかった(削除されるべきなのに)ために発生しました。そのため、オプティマイザーはクエリを降順のインデックスと一致させず、パフォーマンスが最適化されませんでした。(バグ #101220、バグ #32038406)

● optimizer_search_depthが結合に使用されるJOIN_TAB構造体の数よりも少ない場合、デバッグサーバーはアサートにヒットしました。(バグ #100288、バグ #31655483)

● ALTER TABLE操作のEXCHANGE PARTITION、IMPORT TABLESPACE、およびIMPORT PARTITION TABLESPACEの後に、テーブルスペースの以前のロールを反映するシリアル化されたデジタル情報が残されました。現在は、このような場合、古いSDIは、テーブルスペースの交換またはインポートに関係する両方のテーブルスペースから明示的に削除されます。(バグ #98501、バグ#30878065)

● 整数除算演算子(DIV)によって実行された型解決では、結果で予想よりも1つ低い精度が得られました。(バグ #96459、バグ #30156563)

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

MySQL Editions

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

MySQL Editionsの詳細