アカウント管理関連
- DROP USERの実行後にデータベースキャッシュが適切にフラッシュされませんでした。(バグ #37132323)
- このリリースでは、CREATE_SPATIAL_REFERENCE_SYSTEM権限が追加されました。これにより、ユーザーはCREATE SPATIAL REFERENCE SYSTEM、CREATE OR REPLACE SPATIAL REFERENCE SYSTEM、およびDROP SPATIAL REFERENCE SYSTEMのいずれかのステートメントを実行できます。この目的でSUPER権限を使用することは、現在では推奨されていません。
詳細については、Privileges Provided by MySQLを参照してください。(バグ #37046126、WL #16547) - パスワード検証の失敗が常に正しく処理されるとは限りませんでした。(バグ #37041439)
C API関連
- libmysqlclient APIユーザーがプリペアドステートメントをキャッシュして再利用しようとし、一度準備してから、mysql_stmt_bind_param()またはmysql_stmt_bind_named_param()のいずれかを呼び出し、続いてmysql_stmt_execute()を呼び出し、対応するmysql_stmt_close()を呼び出さずに繰り返し呼び出したり、遠い将来 (例えば、アプリケーションの終了時) に呼び出したりした場合、プロセス メモリの使用量が増大します。
この問題を解決するために、バインドパラメータ配列を格納するための別のMEM_ROOTオブジェクトを導入します。このオブジェクトは、mysql_stmt_bind_param()またはmysql_stmt_bind_named_param()を呼び出す度にクリア (メモリの割り当て解除) できます。(バグ #37202066) - OK_PacketのDoxygenコメントは、考えられる全てのケースを網羅していませんでした。これは更新され、サーバーによって実際に送信されたデータを正確に反映するようになりました。 (バグ #35630063)
参考: バグ #35358417、バグ #36374232も参照してください。
文字セットのサポート
- ビューに対するクエリで接続とクライアントの文字セットとしてutf8が使用され、ビューに非ASCII文字を含むリテラル値が含まれていて、クエリでビューのクエリブロックのUNIONに条件プッシュダウンが実行された場合、接続とクライアントの文字セットをlatin1に設定して作成されたビューから選択すると、結果が0行になりました (1行が期待されていました)。
この問題は、同様の問題のエラーを修正した以前の問題に関連していました。その場合の問題は、ビューに含まれる条件を内部クエリブロックにプッシュダウンする時に、ビュー定義の文字セットを適切に考慮していましたが、その時点で実装された修正では、ビューに非ASCII文字が含まれる可能性が考慮されていませんでした。
つまり、プッシュダウンされる条件が、間違った文字セットのテキスト文字列に書き込まれていました。文字列が正しい文字セットで作成されるようにすることで、この見落としを修正しました。(バグ #37111452)
参考: バグ #36246859も参照してください。
コンパイル関連
- macOS: Xcodeでコンパイルする時に、routing_guidelinesの代わりにOBJECTライブラリを使用します。(バグ #37350937)
- macOS: MacOSビルドから古いCMakeコードを削除しました。(バグ #37258036)
- macOS: ClangのHomebrewバージョンを使用してMySQLをビルドできるようになりました。(バグ #37256912)
- macOS: ld: warning: ignoring duplicate librariesという形式の警告とxcodebuildに固有の警告を削除しました。(バグ #37065301)
- Microsoft Windows: Windowsビルドが-DWITH_ASANで設定されるようになりました。(バグ #37309813)
- Microsoft Windows: cmake/msvc_cppcheck.cmakeでWindowsコンパイラの警告 C26445とC26821を無効にしました。これらは両方とも、MySQLでは使用されないstd::spanのgsl::spanの MSVC置換に関連しています。(バグ #37158156)
- Microsoft Windows: Visual Studio 2022でMySQLをビルドする時に発行されるコンパイラ警告を削除しました。(バグ #113870、バグ #36256477)
- Microsoft Windows: WindowsでのMySQLのビルドでは、CMakeオプション -DWITH_SASLはサポートされていません。現在、このオプションを使用しようとすると、ビルドがエラーで終了します。(バグ #113558、バグ #36155972)
- Solaris: SolarisでMySQLをビルドするために必要なGCCの最小バージョンが11.4に引き上げられました。詳細については、Source Installation Prerequisitesを参照してください。 (バグ #37256600)
- CMake 3.26以降、CMakeはCMakeError.logに代わるCMakeFiles/CMakeConfigureLog.yamlファイルを書き込みます。そのため、CMakeError.logへの参照は削除されました。(バグ #37305289)
- Clang 18で非推奨となり、Clang 19で削除された、std::char_traits
の代替として、標準に準拠したmy_char_traits を実装しました。(バグ #37273525) - mysys/で使用されるファイル stream_cipher.hおよびstream_cipher.ccは、sql/に配置されていましたが、このディレクトリ内の他のサーバーコードに依存していませんでした。これらのファイルは、現在はmysys/に移動されています。 (バグ #37257736)
- いくつかの著作権ヘッダーファイルの問題を削除または修正しました。(バグ #37238155)
- GCC 14でMySQLをビルドする時にsql/item.ccで見つかったmaybe-uninitializedエラーを削除しました。(バグ #37157201)
- MySQLをコンパイルする時に不要な警告を生成するいくつかのclang-tidyチェックを無効にしました。(バグ #37129808)
- component_mleをビルドするためのCMakeコードは、GraalVMバイナリが/usr/global/shareの下、またはコマンドラインで指定された場所のいずれかで使用可能であると想定していました。現在、これらの条件のどちらも満たされていない場合は、リモートサーバーからGraalVMをダウンロードできます。(バグ #37121798)
- MySQLをコンパイルするために使用されるlibeditのバージョンが20240808-3.1にアップグレードされました。 (バグ #37101293)
- Clang 13を使用してUbuntu 22.04上でサーバーをビルドできませんでした。(バグ #37075154)
- XCode 16でMySQLをコンパイルした時に見つかった mysql_prepare_create_table() (ファイル sql/sql_table.cc内) のエラーを削除しました。(バグ #37068527)
- MySQLが-FTLS-MODEL=initial-execでビルドされた時に、一部のプラグインがロードに失敗しました。このコンパイラフラグを削除し、代わりにデフォルト (global-dynamic) にフォールバックすることで修正されました。 (バグ #37017999)
- MySQLは、Clang 19を使用してコンパイルできませんでした。(バグ #37014761)
- #include
は、std::chrono::duration_cast()がこのファイルで参照されているにもかかわらず、plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task.ccにありませんでした。(バグ #116779、バグ #37329617) - TIRPCの問題により、cmake 3.11を使用してFedora 40 (および、もしかすると他のLinuxプラットフォーム) でサーバーをビルドできませんでした。(バグ #116144、バグ #37080195)
コンポーネント関連
- MLEコンポーネントの場合、mysql_option.option_usageテーブルのUSAGE_DATA列には、使用された値がブール値ではなく文字列として表示されました。
詳細については、Option Tracker Tablesを参照してください。(バグ #37122749) - mysql_option.option_usageテーブルに存在するエントリは、オプショントラッカーが監査ログの前にインストールされたか後にインストールされたかによって異なります。
詳細については、Option Tracker ComponentおよびMySQL Enterprise Auditを参照してください。(バグ #37037438) - あるセッションでオプショントラッカーコンポーネントをインストールし、別のセッションでUNINSTALL COMPONENTを実行すると、サーバーがハングします。
詳細については、Option Tracker Componentを参照してください。(バグ #36991399) - キーリングコンポーネントの設定ファイル内のエラーが適切にログに記録されませんでした。 (バグ #36982002)
- サブクエリを使用したSET PERSISTと同時に発行されたINSTALL COMPONENTにより、サーバーが予期せず終了することがあります。(バグ #36559078)
参考: バグ #35647759も参照してください。
設定関連
- Microsoft Windows: Windowsでは、MySQL Configuratorは非推奨のFLUSH PRIVILEGESステートメントを実行しなくなりました。(バグ #37170330)
廃止および削除関連
- FLUSH PRIVILEGESステートメントは非推奨となり、発行されると警告が発生します。このステートメントは、将来のMySQLリリースで削除される予定です。
次の構成要素も非推奨となり、使用すると警告が発生します:- FLUSH_PRIVILEGES権限と、この権限の付与
- mysqladmin flush-privileges
- mysqladmin reload
ここにリストされている機能は警告を引き起こしませんが、非推奨と見なされる必要があります:
- SIGHUPによる権限のフラッシュ
- FLUSH PRIVILEGESによるcaching_sha2キャッシュのフラッシュ
- mysqladmin refreshによる権限のフラッシュ
詳細については、FLUSH Statement、mysqladmin — A MySQL Server Administration Program、およびPrivileges Provided by MySQLを参照してください。(WL #16567)
- バージョントークンプラグインは非推奨となり、将来のMySQLリリースで削除される予定です。以下の関連機能も非推奨となり、呼び出されるたびに非推奨の警告が表示されます:
- 関数 version_tokens_delete()、version_tokens_edit()、version_tokens_lock_exclusive()、version_tokens_lock_shared()、version_tokens_set()、version_tokens_show()、および version_tokens_unlock()
- VERSION_TOKEN_ADMIN権限
- version_tokens_sessionおよびversion_tokens_session_numberサーバーシステム変数
version_tokensプラグインをインストールしようとすると、または、このプラグインがインストールされている時にサーバーを起動しようとすると、非推奨の警告が表示されます。
詳細については、Version Tokensを参照してください。(WL #16571)
Doxygen関連
- COM_QUERYパケットのペイロード長が、MySQLパケット例の1つで誤って計算されていました。ペイロード長は、クエリの実際の長さに基づいて正確に計算されるようになりました。
(バグ #116339、バグ #37161043)
ファイアウォール関連
- 場合によっては、アップグレードを実行した後、MySQL Enterprise Firewallに関連するストアドプロシージャが正しく処理されませんでした。(バグ #36084822)
INFORMATION_SCHEMA関連
- PROCESSLISTテーブルのパフォーマンスの問題を修正しました。(バグ #36778475)
インストール関連
- MySQL 5.7からそれ以降のMySQLリリースシリーズにアップグレードする場合、システムによって作成されたmysql.sysおよびmysql.sessionアカウントは、MySQL 8.0で非推奨となりMySQL 9.0で削除されたmysql_native_passwordプラグインの代わりに、caching_sha2_password認証プラグインを使用するように変更されました。(バグ #36608160)
JavaScriptプログラム
- MySQL ENUMおよびSET型が、JavaScriptストアドルーチンの引数としてサポートされるようになりました。これらのMySQL型とJavaScript型の間の変換ルールを含む詳細については、Conversion to and from MySQL ENUM and SETを参照してください。(WL #16599)
- MySQL Enterprise Editionの一部として利用可能なMLEコンポーネントでサポートされるJavaScriptプログラムでは、JavaScriptルーチンからユーザー定義の関数、プロシージャ、および変数へのアクセスがサポートされるようになりました。MySQLストアドファンクションとプロシージャには、ルーチンを呼び出すために引数とともに使用できるFunctionオブジェクトを返すSchemaメソッド getFunction()およびgetProcedure()を使用してアクセスできます。ストアドプロシージャのOUTおよびINOUTパラメータは、mysql.arg()で作成されたプレースホルダを使用します。詳細情報と例については、Stored Routine APIを参照してください。
MLEコンポーネントは、START TRANSACTION、COMMIT、ROLLBACK、SET AUTOCOMMITなど、ほとんどのMySQLトランザクションSQLステートメントのアクションを実行するJavaScript MySQLトランザクションAPIも提供するようになりました。セーブポイントのサポートも含まれています。SqlErrorオブジェクトのサポートが含まれています。詳細については、JavaScript Transaction APIおよびSqlError Objectを参照してください。
MySQLユーザー変数は、JavaScriptグローバルSessionオブジェクトのプロパティとして直接アクセスできます。例えば、myvarという名前のユーザー変数は、session.myvarとして読み取ったり設定したりできます。詳細と例については、Accessing Session Variables from JavaScriptを参照してください。
このリリースでは、MySQL組み込み関数 RAND()、SLEEP()、UUID()、およびIS_UUID()への直接アクセスのサポートも追加され、それぞれ、rand()、sleep()、uuid()、およびisUUID()です。MySQL Functionsを参照してください。
JavaScriptプログラムとMLEコンポーネントの詳細については、JavaScript Stored ProgramsおよびMultilingual Engine Component (MLE)を参照してください。(WL #16585) - MySQL Enterprise Editionの一部として利用可能なMLEコンポーネントは、他のJavaScriptストアドプログラムから呼び出すことができる関数を含む再利用可能なJavaScriptライブラリをサポートするようになりました。JavaScriptライブラリは、このリリースで追加されたCREATE LIBRARYおよびDROP LIBRARY SQLステートメントを使用して管理できます。CREATE FUNCTIONおよびCREATE PROCEDUREに追加されたUSING句を使用して、他のストアドJavaScriptプログラムに含めることができます。USINGは、1つ以上のライブラリ名のリストをサポートします。
CREATE LIBRARYは、特定のデータベースに新しいJavaScriptライブラリを作成します。ライブラリコードは、作成時に解析され、有効性がチェックされ、エラーがある場合は拒否されます。DROP LIBRARYは、JavaScriptライブラリを削除します。Library関数は、library_name.function_name表記を使用して、他のJavaScriptストアドプログラムで参照できます。ライブラリは、それらをJavaScriptプログラムに含める時にUSINGを使用してエイリアス化できます。
ライブラリからコードを取得するためには、このリリースで新しく追加されたSHOW CREATE LIBRARYステートメントを使用します。関連する2つの新しい情報スキーマテーブルも追加されました。LIBRARIESテーブルは、JavaScriptライブラリに関する情報を提供し、ROUTINE_LIBRARIESは、JavaScriptライブラリを含むストアドルーチンに関する情報を提供します。
サーバー上で発行されたライブラリDDLおよびSHOW CREATE LIBRARYステートメントの数は、ステータス変数 Com_create_library、Com_drop_library、およびCom_show_create_libraryとして使用できます。
詳細と例については、Using JavaScript LibrariesおよびMultilingual Engine Component (MLE)を参照してください。(WL #16359、WL #16360、WL #16362、WL #16555)
MySQL Enterprise関連
- レプリケーション: レプリケーションアプライアメトリックテーブルのハンドラーインターフェイスのrnd_pos()関数が誤って実装されていました。この関数が使用されている場合、テーブルに1行が欠落しているように見えました。
詳細については、Replication Applier Metrics Componentを参照してください。(バグ #37076428、バグ #37132660) - レプリケーション: ほとんどの待機操作では、待機の開始時間と終了時間を記録し、その差を合計待機時間に追加しますが、コミットオーダーの待機時間を追跡する場合はそうではありませんでした。コミットオーダーの待機時間を追跡する場合は、1秒ごとに起動して待機時間を1ずつ増やす関数を使用しました。この1秒の精度は、ほとんどの実用的な目的には低すぎ、コードが不必要に複雑になりました。
これらの問題を修正するために、コミットオーダーの待機時間も他の待機と同じ方法で追跡するようになりました。
詳細については、Replication Applier Metrics Componentを参照してください。(バグ #37053708) - レプリケーション: MySQL Option Trackerコンポーネントは、これらの機能が有効になっている場合はいつでも、バイナリ ログ、グループレプリケーション、およびレプリカとしてのサーバーの使用に関する使用情報を提供できるようになりました。
詳細については、Option Tracker Supported Componentsを参照してください。(WL #16529)
オプティマイザ関連
- JSON: インデックスルックアップ用のイテレータベースのEXPLAIN FORMAT=JSONへのルックアップ参照を追加しました。JSON v2 EXPLAIN形式のlookup_referencesフィールドは、JSON v1 EXPLAIN形式のrefフィールドに対応します。(バグ #37126176)
- 一部のハッシュ結合では、行IDを使用していないにもかかわらず、pack_rows::RequestRowId()で異常に長い時間がかかっていました。
行IDを要求するテーブルがない場合、RequestRowId()でTableCollection::tables()のループをスキップすることで修正されました。(バグ #37243461) - EXPLAIN FORMAT=TREEでは、RowID-Ordered Retrieval (ROR) 交差プランのクラスター化されたプライマリキースキャンが表示されるようになりました。 (バグ #37199800)
- WHERE句に集計関数が含まれる条件をプッシュダウンすると、集計関数が評価されるべきでない時に評価されてしまいます。(バグ #36421735)
パフォーマンススキーマ関連
- root以外のユーザーがSTART REPLICAを実行した場合、PERFORMANCE_SCHEMA.PROCESSLISTは、システムユーザーではなく、新しく生成されたフォアグラウンドレプリケーションスレッドにそのユーザーの名前を割り当てました。
このリリースでは、システムユーザーが全てのフォアグラウンドシステムスレッドに割り当てられます。(バグ #37357562) - PERFORMANCE_SCHEMA.PROCESSLISTは、ユーザー名を持たないフォアグラウンドスレッドをフィルターしました。このリリースでは、ユーザー名のないフォアグラウンドスレッドにsystem_userが割り当てられます。(バグ #37357562)
- 特定の状況では、メタデータロックを別のLOCK_TYPEにアップグレードまたはダウングレードできます。この変更は、PERFORMANCE_SCHEMA.METADATA_LOCKSテーブルには反映されませんでした。
(バグ #116625、バグ #37271768)
プラガブル認証
- AUTHENTICATION_POLICY_ADMIN権限に関連する以下の問題が解決されました:
- 権限を持つユーザーの場合、authentication_policyのグローバル値で指定されたデフォルトが指定の有無にかかわらず作成時に組み込まれていたため、デフォルトの認証プラグインが省略されたユーザーを作成できませんでした。
アカウント作成を実行するユーザーがAUTHENTICATION_POLICY_ADMIN権限を持っている場合は、グローバル認証ポリシーを無視することによって、この問題を修正しました。 - 権限を持たないユーザーの場合、認証要素を指定せずにユーザーを作成しようとすると、エラーが発生して拒否されました。これは、デフォルトのグローバル認証ポリシーの必須要素が、指定されていない場合は含まれていなかったためです。
アカウント作成を実行するユーザーがAUTHENTICATION_POLICY_ADMIN権限を持っていない場合は、グローバル認証ポリシーから必須要素を含めることによって、この問題を修正しました。
詳細については、authentication_policyシステム変数の説明、およびPrivileges Provided by MySQLを参照してください。 (バグ #37027739)
- 権限を持つユーザーの場合、authentication_policyのグローバル値で指定されたデフォルトが指定の有無にかかわらず作成時に組み込まれていたため、デフォルトの認証プラグインが省略されたユーザーを作成できませんでした。
- authentication_openid_connectプラグインがオプショントラッカーコンポーネントに登録されました。
詳細については、Option Tracker ComponentおよびOpenID Connect Pluggable Authenticationを参照してください。(バグ #116045、バグ #37041216)
SQL構文関連
- 重要な変更: BINLOGキーワードは、MySQLストアドプログラムで引用符なしのラベル名として使用できなくなりました。このリリースにアップグレードする前に、影響を受けるアプリケーションを適宜更新する必要があります。
詳細については、Keywords and Reserved Wordsを参照してください。(バグ #22574003)
追加または変更された機能
- InnoDB: リカバリ中、最後のバッチを除く全てのリカバリバッチでIBUFマージが無効になっていましたが、現在は全てのバッチで無効になっています。この変更により、リカバリ中に新しいredoログエントリが追加されることが防止されます。これは、追加のIBUFページからの読み取りと書き込みによってデッドロックが発生し、リカバリのパフォーマンスが低下するためです。(バグ #33134355、WL #15372)
- Microsoft Windows: Windowsでは、MySQL ConfiguratorにMySQL Serverインストールを設定するためのコマンドラインインターフェイスが追加されました。詳細については、MySQL Configurator CLIを参照してください。
このリリースの既知の制限: 新しいCLIは、configureアクションのみをサポートします。(WL #16564) - システムのcurlライブラリにリンクするのではなくcurlを含むバイナリパッケージは、curl 8.11.1を使用するようにアップグレードされました。 (バグ #37389565)
- OpenSSL 3.xの機能を利用して、MySQL MD5()およびSHA2()関数によって実行される暗号化操作のパフォーマンスを向上させるためにコードをリファクタリングしました。(バグ #116939、バグ #37185170、WL #16504)
- ソースコードの静的分析ツールを追加しました。使用方法の詳細については、ソース コードのscripts/static_analysis.mdを参照するか、python3 ./scripts/static_analysis.py --helpを実行して追加のヘルプを参照してください。これを使用して、単一のコミットまたはソースコードリポジトリ全体を確認します。(WL #16329)
- キャッシュ SHA-2認証プラグインを、監査ログプラグイン APIではなくイベントコンポーネント APIを使用するように変換しました。これにより、sha2_cache_cleaner監査プラグインも削除されます。(WL #16572)
主なバグ修正
- 互換性のない変更: 最小境界矩形 (MBR) の最小限の変更を伴うジオメトリの更新の後に削除操作を実行すると、空間インデックスで破損が発生しました。
このリリースにアップグレードする場合、事前に空間インデックスを削除し、アップグレードの完了後にそれらを再作成することをお勧めします。あるいは、アップグレード直後、そのようなインデックスを削除して再作成することもできます。ただし、それらが含まれるテーブルを使用する前にです。以前のバージョンにダウングレードすると、前述の元の問題が再び発生することにも注意してください。
詳細については、Creating Spatial Indexesを参照してください。(バグ #36452528) - InnoDB: 大量の状況でのシミュレートされた非同期 I/O (AIO) ハンドラーのパフォーマンスが向上しました。(バグ #37366607)
- InnoDB: 非同期 I/O (AIO) ページクリーナースレッド管理のパフォーマンスが向上しました。 (バグ #37359213)
- InnoDB: パフォーマンススキーマのクエリ中に同時にテーブルをトランケートすると、MySQLが予期せず停止することがあります。(バグ #37271715)
- InnoDB: 空間インデックスと自動増分列の両方を含むテーブルでINPLACEアルゴリズムを使用するALTER TABLE操作を行うと、破損が発生したり、デバッグビルドでデバッグアサートがトリガーされたりする可能性があります。これは、新しいレコードが準備される間に、空間インデックスの古いレコードで自動増分列の値が上書きされたために発生しました。(バグ #37189985)
- InnoDB: 特定のIOバッファのシリアル化により、デバッグビルドでアサーションがトリガーされ、システムがハングしました。(バグ #37139618)
- InnoDB: 外部に保存されたBLOBを含む行の仮想列情報がUPDATE操作中に必ずしもログに記録されず、Index PRIMARY is corruptedというエラーが発生することがありました。(バグ #36880863)
- InnoDB: InnoDBの起動時間が改善されました。(バグ #36880863)
参照: この問題は、バグ #36808732のリグレッションです。 - InnoDB: FTS_DOC_ID値が4294967295より大きいテーブルにFULLTEXTインデックスを作成すると、アサーションエラーが発生しました。(バグ #36879147)
参照: バグ #37387224も参照してください。 - InnoDB: can_older_trx_be_still_active()を改良し、trx_sys->rw_trx_listを使用しなくなりました。(バグ #36729529)
- InnoDB: プライマリキーを削除し、その後INPLACEアルゴリズムを使用して降順で新しい AUTO_INCREMENT列をプライマリキーとして追加できませんでした。
(バグ #36658450) - InnoDB: mysqladminクライアントからメモリリークを削除しました。(バグ #36537941)
- InnoDB: ユーザーテーブルスペースを拡張すると、ファイル拡張REDOログレコード (MLOG_FILE_EXTEND) が生成されますが、システムテーブルスペースを拡張すると生成されませんでした。(バグ #36511673)
- InnoDB: Windowsで、ファイルアクセスを遅くする二重書き込みバッファのリグレッションを修正し、ファイルを開くためのFILE_FLAG_OVERLAPPEDフラグの使用をリファクタリングしました。(バグ #36259487)
- InnoDB: 自己参照外部キーとフルテキストインデックスを持つテーブルに対するDELETE操作でアサーションがトリガーされる可能性がありました。(バグ #36234681)
- InnoDB: 廃止されたREDOログ形式を処理するコードを削除しました。 (バグ #35020216)
- InnoDB: REDOログ挿入 (MLOG_REC_INSERT) の共通プレフィックス圧縮は無効でしたが、バージョンが一致すると有効になりました。(バグ #34946626)
参照: この問題は、バグ #13899のリグレッションです。 - InnoDB: セカンダリインデックスを含む生成された列を含むON DELETE CASCADEは、削除前に仮想列テンプレートが初期化されていないため、失敗することがあります。
(バグ #33691659) - InnoDB: 子テーブルの更新ノードを構築中に更新操作で仮想列を更新しようとしましたが、外部キー制約では仮想列を参照できないため、更新すべきではありませんでした。(バグ #33327093)
- InnoDB: バイナリログが無効になっている場合、サーバーがクラッシュした後に全文検索クエリが不正確になる可能性がありました。
(バグ #116212、バグ #37095383) - InnoDB: dd_set_autoinc()メソッドの重複宣言を削除しました。(バグ #116175、バグ #37089340)
- InnoDB: INPLACEアルゴリズムを使用してInnoDBテーブルを再構築するALTER TABLEが、ページラッチを解放するために再構築が一時停止されている間に重複していないレコードが同時に挿入されたために、重複キーエラーで拒否される可能性がありました。
(バグ #115511、バグ #36808088) - InnoDB: 別のテーブルからの外部キー制約によって参照される列ではALGORITHM=INSTANTを使用できないというルールを強制するチェックで、その制約の最後のフィールドが検査されませんでした。(バグ #115457、バグ #36796094)
- InnoDB: CPU使用率統計では128を超えるプロセッサ数は考慮されませんでした。そのため、これらの大規模システムではパフォーマンスが低下する可能性がありました。(バグ #115399、バグ #36765223)
- InnoDB: 空のテーブルに対してADD COLUMNまたはDROP COLUMNを含むALTER TABLEを実行すると、デフォルトでINSTANTではなくINPLACEアルゴリズムが使用されるようになりました。この変更により、これらの単純な操作では行バージョンが増分されなくなりました。(バグ #113051、バグ #36004394)
- InnoDB: INPLACEアルゴリズムを使用してInnoDBテーブルを再構築するALTER TABLE操作では、クラスター化インデックスまたは空間インデックスを含む変更されたテーブルで同時にパージが発生した場合、データ行が失われる可能性がありました。
(バグ #110706、バグ #113812、バグ #115608、バグ #116764、バグ #35303494、バグ #36261480、バグ #36846567、バグ #37318367) - InnoDB: 降順のプライマリキーとindex_merge最適化を使用したクエリでは、行が欠落するなどの誤った結果が返されることがありました。(バグ #106207、バグ #33767814)
- レプリケーション: InnoDB ClusterSetセットアップで、クラスター内の全てのノードでautocommitがOFFに設定されている場合、MySQL Shellを使用した制御されたスイッチオーバーがError 1105 (Unknown error)で拒否されました。
これを修正するために、autocommit=OFFの場合は常にchannel_change_source_connection_auto_failover()で新しいトランザクションを強制し、SOURCE_CONNECTION_AUTO_FAILOVERの変更後に情報リポジトリトランザクションが実行された時にテーブルアクセスのデッドロックを防止します。(バグ #37173907) - レプリケーション: 大規模なトランザクションが受信および適用されている時に、STOP REPLICAを使用してレプリケーションチャネルを停止する要求が行われましたが、MySQLはこれを適切に実行せず、その後チャネルコマンドをまったく処理しませんでした。さらに、サーバーのシャットダウンプロセスが正常に完了しなかったため、MySQLプロセスを強制終了するか、ホストシステムを再起動する必要がありました。 (バグ #115966、バグ #37008345)
- レプリケーション: レプリカがソースに再接続する時に書き込まれるログメッセージ (例えば、STOP REPLICAに続いてSTART REPLICAを発行して停止および再起動した場合) が、「While initializing dump thread for replica with UUID uuid, found a zombie dump thread with the same UUID. Source is killing the zombie dump thread(thread_id)」から「Upon reconnection with the replica, while initializing the dump thread for UUID uuid, an existing dump thread with the same UUID was detected. The source is terminating the previous dump thread (thread_id), which is normal and expected」に改善されました。(バグ #84358、バグ #25330090)
- グループレプリケーション: 内部関数 cs::apply::Commit_order_queue::front()とcs::apply::Commit_order_queue::remove()の間の潜在的な競合状態が削除されました。(バグ #37223451)
参照: バグ #35206392も参照してください。 - グループレプリケーション: プライマリノードが予期せずグループを離れ、すぐに再参加しようとした場合、他の障害のあるメンバーを削除するために選出されたメンバーは、障害のあるノードを追放または削除しようとしましたが、過半数に達しなかったためできませんでした。追放または削除されたノードがプライマリだった場合、これにより、クラスターはプライマリなしで残り、使用できない状態になりました。(バグ #36991859)
参照: バグ #37181867も参照してください。 - グループレプリケーション: 場合によっては、新しいセカンダリを追加すると既存のセカンダリが遅れ、プライマリが再起動されるまで書き込みが不可能なまま継続するデッドロックが発生しました。
このデッドロックは、トランザクションが (ビュー変更の前または後に) ビュー変更の正しい側でコミットされることを保証するチケットマネージャーと、トランザクションが受信されたのと同じ順序でコミットされることを保証するインバウンドレプリケーションチャネルのコミットオーダーマネージャーとの間で、この2つのマネージャーが異なる順序を必要としていた場合に、発生しました。つまり、場合によっては、新しいセカンダリを追加するとグループプライマリが書き込みを実行できなくなることがありました。
このようなデッドロックが発生した場合、コミットオーダーマネージャーの順序を無視し、競合しないトランザクションに対してチケットマネージャーの順序を適用することで、この問題を解決しました。この結果、View_change_log_eventの近くでは、replica_preserve_commit_orderが厳密に遵守されない可能性があります。つまり、replica_preserve_commit_orderは、グループレプリケーションプライマリのインバウンドチャネルで厳密な保証を提供しなくなりました。replica_preserve_commit_orderは、ビュー変更ログイベントに関する競合しないトランザクションを除き、トランザクションが正しく順序付けられていることを引き続き保証します。(バグ #35206392)
参照: バグ #37223451も参照してください。 - グループレプリケーション: is_subset_not_equals()への不要な呼び出しを排除することで、グループレプリケーションのガベージコレクションを改善しました。(バグ #110673、バグ #35286974)
- グループレプリケーション: 全てのメンバーが同じバージョンのMySQLを実行しているグループからグループメンバーを削除し、それを後のバージョン (後のリリースシリーズから) にアップグレードし、その後グループに再度参加するように要求すると、アップグレードされたグループメンバーが回復状態でハングしました。
- スコープ内に不明な列があるクエリを許可する条件について、MySQL 9.1.0で行われた既存の修正を改善しました。(バグ #37341055)
参照: この問題は、バグ #35058815のリグレッションです。 - JSON文字列ではない型引数を使用してmle_set_session_state()を呼び出すと、コンポーネントが終了しました。 (バグ #37334566)
- 解決中にマテリアライズ対象としてマークされたサブクエリは、クエリ内の他の場所で不可能な条件が検出されると最適化されませんでした。これにより、オプティマイザーがマテリアライズされる必要のあるサブクエリを検出しようとした時に問題が発生しました。サブクエリが最適化されなかったため、クエリブロックの結合ポインタにアクセスしようとすると、サーバーが終了しました。
サブクエリのマテリアライズ変換を完了する前に、サブクエリが最適化されているかどうかを確認することによって、この問題を解決します。(バグ #37321762) - 特定のネストされたSELECTステートメントは、一時テーブルでER_DUP_KEYを生成しました。(バグ #37309915)
参照: この問題は、バグ #115597、バグ #36846564のリグレッションです。 - テーブルを使用せず、ゼロ以外のOFFSET句を持つサブクエリを持つクエリは、正しい結果を返しませんでした。例えば、SELECT (SELECT 1 LIMIT 1 OFFSET 10)は、予期されたNULLではなく1を返しました。 (バグ #37293822)
- エラー ER_DD_UPDATE_DATADIR_FLAG_FAIL、ER_IB_MSG_FIL_STATE_MOVED_PREV_OR_HAS_DATADIR、ER_RPL_KILL_OLD_DUMP_THREAD_ENCOUNTERED、およびER_RPL_MTA_ALLOW_COMMIT_OUT_OF_ORDERは、もともとMySQL 8.0で定義されていましたが、その後MySQL 8.4で異なるエラーコード番号 (ただし名前は同じ) が割り当てられました。MySQL 8.0で割り当てられた番号は、現在、MySQL 8.0にのみ適用されます。MySQL 8.4以降のリリースシリーズでは、MySQL 8.4で割り当てられた番号のみが使用されます。(バグ #37284176)
- mle::validate()およびvalidate_session_options()で、NULL入力引数の欠落チェックを追加しました。 (バグ #37267887)
- ハッシュ結合の場合、ハッシュ結合がメモリ内で完全に実行できず、その後ディスクにスピルされた場合でも、使用されないHashJoinChunkオブジェクトの不要な構築と破棄に時間とリソースが費やされました。(バグ #37235166)
- アップグレード中にsysスキーマにイベントを追加すると、サーバーが予期せずシャットダウンしました。(バグ #37162611)
- sql/item_cmpfunc.ccで、Item_bool_func2::resolve_type()が Item_bool_func::resolve_type() への未チェックの呼び出しを行いました。Item_bool_func::resolve_type() への呼び出しは戻り値を無視し、エラーが発生した場合でも実行が続行されました。(バグ #37143289)
- value BETWEEN 'a' AND 'b'などの式を評価する場合、サーバーは文字列リテラルをチェックし、それらと比較する値と同じ文字セットと照合順序を使用していることを確認します。(バグ #37086818)
- sql/item_func.ccの不要なアサーションを削除しました。 (バグ #37083848)
参照: バグ #29467577も参照してください。 - option_tracker/udfs.ccで見つかったメモリリークを削除しました。(バグ #37075241)
- AppArmorは、スタックトレースを生成するために必要なファイルである /proc/$pid/task/$thread_id/memへのアクセスを拒否しました。(バグ #37063288)
参照: バグ #37387034も参照してください。 - sql/sql_resolver.ccに、WalkAndReplace()への空のポインターの欠落チェックを追加しました。(バグ #36987582)
参照: この問題は、バグ #112557、バグ #35855294のリグレッションです。 - MySQLでは、ウィンドウ PARTITION BY式とORDER BY式で外部参照が許可されていましたが、これはSQL標準に準拠していませんでした。(バグ #36921175)
- クエリがサブクエリ実行にindex_subquery結合タイプを使用し、サブクエリテーブルが実行プランでマテリアライゼーションを使用した場合、サブクエリのフィルター条件が無視されることがありました。派生テーブルアクセスパスがフィルター条件を置き換え、フィルターレイヤーのない最終プランになりました。これを修正するために、このような場合には、フィルターアクセスパスを置き換えるのではなく、派生テーブルアクセスパスをフィルターアクセスパスと一緒に追加するようになりました。 (バグ #36918913)
- 一部のスカラーサブクエリから派生テーブルへの変換は、必ずしも正しく実行されませんでした。(バグ #36902116)
- a UNION b UNION c ...に類似した一部のUNION操作は、過剰なメモリを消費しました。これを防ぐために、コンテキスト化が行われる前に、等価セット操作を解析レベルでフラット化しました。これにより、このような操作によるリソース使用量が削減されます。(バグ #36652610)
- 内部関数 my_print_help()を改良しました。(バグ #36615714)
参考: バグ #37387224も参照してください。 - Acl_cacheから不正なコードを削除しました。(バグ #36608160)
- 行値コンパレータの一部である集計関数 WITH ROLLUPを含むサブクエリは、必ずしも正しく処理されませんでした。(バグ #36593235)
参照: バグ #37387180も参照してください。この問題は、バグ #30969045、バグ #30921780、バグ #26227613、バグ #29134467、バグ #30967158のリグレッションです。 - 変数を永続化する時に発生するエラーが正しく報告されない可能性がありました。(バグ #36574732)
- WITH ROLLUPを使用する一部のサブクエリは、必ずしも正しく処理されませんでした。(バグ #36421704)
- MyISAMブロック長の計算が必ずしも正しく実行されませんでした。 (バグ #36347992)
- 潜在的な競合状態を削除しました。(バグ #35981769)
参照: バグ #36608160も参照してください。 - mysqldump --column-statisticsオプションはデフォルトで無効になりました。(バグ #35209008)
- FTSと同時実行DDLまたはDMLに関連する問題を修正しました。(バグ #34633727)
- 同じ名前のテーブルが存在する場合、DROP VIEW nameはER_BAD_TABLE_ERRORで拒否されました。(バグ #33200087)
- explain_json_format_versionを2に設定すると、EXPLAIN FORMAT=JSONの出力に次の影響があります:
- 出力には、major.minor形式のJSONスキーマバージョンが含まれます。これは、MySQL 9.2では常に2.0として表示されます。
- クエリ属性のみがトップレベルオブジェクトに直接保存されます。バージョン 1の出力では、このオブジェクトにはクエリ属性とイテレータ属性の両方が含まれます。
explain_json_format_version = 1の場合のEXPLAIN FORMAT=JSONの出力は、このリリースではまったく変更されていません。 (バグ #116915、バグ #37372130、バグ #35239659)
- mysqlslapユーティリティは、--ssl-mode=disableオプションが渡された時にSSLを無効にしませんでした。(バグ #116844、バグ #37353662)
- YEAR列とBOOL(TINYINT)列のUNIONを実行すると、内部のfield_types_merge_rules配列の欠陥により、結果のデータ型がTINYINTになりました。このような場合の結果のデータ型をSMALLINTに調整することで、この問題を修正しました。(バグ #116415、バグ #37192491)
- ハッシュテーブルが結合バッファに収まらずディスクにあふれた時、ハッシュアンチ結合を使用する一部のクエリによって誤った結果が返されました。 (この問題を引き起こしたクエリは実際にはLEFT JOINを指定していましたが、これは内部的に左外部結合からアンチ結合に変換されました。)
問題は、プローブ行をチャンクファイルに書き込む時にプローブテーブルの一部の行がスキップされることでした。スキップされた行は、結合キーの一部にNULLが含まれていた行です。このような行は、ビルドテーブルに一致がないことがわかっているため、内部結合とセミ結合ではスキップできますが、外部結合とアンチ結合では、ビルドテーブルに一致する行がないプローブテーブルの行は結合結果の一部である必要があるため、チャンクファイルに含める必要があります。
外部結合のチャンクファイルには、既にこれらの行が保持されています。この修正により、その目的で使用されるロジックが拡張され、アンチ結合にも適用されます。(バグ #116334、バグ #37161583) - 共通テーブル式を含むクエリは、プリペアドテートメントまたはストアドプロシージャで使用されると、2回目以降の実行で異なる結果が生成される場合がありました。 (バグ #116140、バグ #37074489)
- サーバーのsql_modeにANSI_QUOTESが含まれている場合、SHOW GRANTSはストアド関数とストアドプロシージャの名前をバッククォート (`) で囲み、他のオブジェクトの名前には二重引用符 (") を使用しました。現在、このような場合は常に二重引用符が使用されます。(バグ #115953、バグ #37003502)
- BIT値を引数として持つウィンドウ関数は、BITを返しませんでした。(バグ #115597、バグ #36846564)
- --auto-generate-sql-execute-numberと--concurrencyが--auto-generate-sqlまたは--queryなしで指定されている場合、mysqlslapユーティリティは応答しなくなりました。(バグ #113215、バグ #36048754)
- MySQL 8.0以降では、SELECT DISTINCT ... FROM t1 WHERE NOT IN(SELECT ...) 形式のクエリは、可能な場合はアンチ結合に変換され、オプティマイザーはテーブル t1のグループスキップスキャンを選択しませんでしたが、MySQL 5.7では選択されていました。その結果、このようなクエリのパフォーマンスが低下しました。アンチ結合変換後はクエリは単一テーブルクエリではなくなり、このアクセスメソッドは単一テーブルクエリに対してのみ有効になるため、グループスキップスキャンは選択されません。セミ結合に変換されたクエリでも同じ動作が見られます。このような場合、グループスキップスキャンアクセスメソッドは、アクセスメソッドが重複の削除のみに使用される場合 (つまり、DISTINCTまたはGROUP BYを使用するが、集計関数を使用しない場合)、引き続き使用され得ます。
これを修正するために、クエリに集計関数が含まれていない限り、内部変換後に存在するセミ結合テーブルの数に関係なく、元のクエリにテーブルが1つしかない場合にはグループスキップスキャンを有効にします。(バグ #112632、バグ #35842412) - mysqlクライアントでは、オプティマイザーヒントコメント内で '#' または '--' を使用することができませんでした。
(バグ #98521、バグ #30875669) - mysqldump --compactオプションで、--tz-utcが無効になりました。
以前は、--tz-utcが有効 (デフォルト) の場合、--compactはデータを読み取る前にSET TIME_ZONE='+00:00'を実行しましたが、このステートメントをダンプファイルに書き込みませんでした。これにより、データがUTCを使用して抽出されたにもかかわらず、ダンプの読み取り側はデータがこのタイムゾーンを使用していることを認識しなかったため、不整合が発生しました。(バグ #58491、バグ #11765514) - VECTOR列の内部表現を比較する時、長さのプロパティは考慮されませんでした。
全ての変更点やバグ修正については、以下のページをご覧ください。
MySQL 9.2.0 リリースノート(MySQLウェブサイト):
https://dev.mysql.com/doc/relnotes/mysql/9.2/en/news-9-2-0.html
MySQL Editions
MySQLのサブスクリプションは、24時間365日体制でお客様をサポートいたします。さらに MySQL Enterprise Edition では、データベース管理者支援ツール MySQL Enterprise Monitor やバックアップツール MySQL Enterprise Backup をご利用いただけます。