アカウント管理関連
- 一部のケースでは、ユーザーにEXECUTE権限を付与できるものの、後で同じユーザーからその権限を取り消すことができないことがありました。(バグ #37570206)
監査ログ関連
- <command_class>が<name>Execute</name>に対して入力されませんでした。
詳細については、Logging Specific Event Classesを参照してください。(バグ #36686351)
コンパイル関連
- グループレプリケーション:OpenSSLエンジンインターフェースは非推奨となり、Fedoraを含む一部のLinuxディストリビューションのOpenSSL v3メインパッケージには含まれなくなりました。
ビルドの問題を回避するために、グループ通信システム(GCS)によるOpenSSLエンジンインターフェースの使用は、OpenSSLバージョン1.1より前のバージョンに制限されました。(バグ #37475769) - Linux:Oracle Linux 10でサーバーをビルドする場合は、/usr/bin/gcc (GCC 14.2.1)を使用してください。(バグ #37616148)
- Linux:protocバージョン3.14以前でビルドする場合は、--experimental_allow_proto3_optionalを使用してください。(バグ #37579947)
- Microsoft Windows:MSVC_CPPCHECKを有効にしたVisual Studio 17.13.1を使用してサーバーをビルドできませんでした。 (バグ #36925076)
- バンドルされているCurlライブラリをバージョン 8.12.1にアップグレードしました。(バグ #37633587)
- FreeBSD上でMySQLをコンパイルする際に -ftls-model=initial-execオプションを無効にしました。(バグ #37613105)
- FreeBSD上でAbseilをビルドできませんでした。(バグ #37611924)
- comp_errの実行時にshare/charsets/Index.xmlを読み込まないでください。(バグ #37569683)
- mysql_version.cmakeファイルが複数回インクルードされました。(バグ #37559512)
- 未使用のstrings/utr11-dump.ccファイルを削除しました。(バグ #37549844)
- バンドルされているopentelemetry-cppをバージョン 1.19.0にアップグレードしました。 (バグ #37506554)
- clang-tidyによって生成される多数の警告を修正しました。(バグ #37471922)
- include/my_systime.hに不要なstd::chronoが含まれていましたが、これは削除されました。(バグ #37458343)
- xxhash関数をlz4ライブラリ (バンドル版またはソース) から独立して使用するために、xxhash.cを独自のバイナリにコンパイルしましたが、これには多くのCMakeディレクティブを使用する必要がありました。代わりに、xxhashのインターフェースライブラリを構築し、そのような関数が使用される場所では必ずそのライブラリにリンクするようになりました。(バグ #37417386)
- lz4にバンドルされているバージョンではなく、GitHubからのxxHash-0.8.2を使用してください。 (バグ #37387318)
- バンドル版のopentelemetry-cppがバージョン 1.18.0にアップグレードされました。(バグ #36708755)
- Protocol::ColumnDefinition41の末尾にある未使用バイトに関するドキュメントを追加しました。
(バグ #117346、バグ #37541403)
コンポーネント関連
- 重要な変更:本リリースより、MySQL Enterprise Editionの一部であるMySQL Enterprise Data Masking and De-Identificationは、MySQL Enterprise Data Maskingと呼ばれるようになりました。
9.2エディション以降のドキュメントは、この変更を反映するように更新されています。
詳細については、MySQL Enterprise Data Maskingを参照してください。(WL #16721) - グループレプリケーション:フロー制御統計コンポーネントの通常ファイルとデバッグファイルのパッケージ仕様ファイル内のエントリの一部が誤って配置されていました。
フロー制御統計コンポーネントは、MySQL Enterprise Editionの一部として利用可能です。詳細については、Group Replication Flow Control Statistics Componentを参照してください。(バグ #37486491) - グループレプリケーション:グループレプリケーションプライマリエレクションコンポーネントが追加されました。これにより、フェイルオーバー発生時に新しいプライマリを選択するための最新の選択方法を指定できます。グループレプリケーションプラグインは、このコンポーネントの前提条件であり、各グループメンバーにインストールする必要があります。さらに、コンポーネントが機能するためには、各グループメンバーで、group_replication_elect_prefers_most_updated.enabledシステム変数をONに設定する必要があります。
このコンポーネントは、監視の目的で2つのステータス変数も提供します。Gr_latest_primary_election_by_most_uptodate_members_trx_deltaは、最新のプライマリ選択方法が最後に使用された時の、新しいプライマリとそれの最も新しいセカンダリとの間のトランザクション数の差です。Gr_latest_primary_election_by_most_uptodate_member_timestampは、最新の選択方法を使用して新しいプライマリが最近選択された時のタイムスタンプを提供します。
新しいプライマリが選出されると、コンポーネントはイベントをログに記録します。ログエントリに含まれるこの情報には、タイムスタンプ、昇格したセカンダリのUUID、新しいプライマリの選択に使用された方法(最新の方法(およびこのセカンダリがプライマリより何トランザクション遅れていたか))、または、重み付け(選択されたセカンダリに割り当てられた重み)が含まれます。
このコンポーネントの詳細については、Group Replication Primary Election Componentを参照してください。
このコンポーネントは、商用製品であるMySQL Enterprise Editionの一部です。詳細については、MySQL Enterprise Editionを参照してください。(WL #16432) - このリリースでは、MySQL Enterprise Editionの一部であるMySQLオプショントラッカーコンポーネントに以下の機能強化が行われました:
- オプショントラッカーをサポートする各機能で、option_tracker_usage:feature_nameというグローバルステータス変数が提供されるようになりました。この変数は、機能が使用された回数を示します。この変数は、オプショントラッカーコンポーネントがインストールされているかどうかに関係なく提供されます。
これらのステータス変数は、SHOW GLOBAL STATUS LIKE 'option_tracker_usage%'を使用するか、パフォーマンススキーマのglobal_statusテーブルから選択することで表示できます。 - 使用状況データに使用されるJSON形式のブール型usedキーは、カウンター usedCounterに置き換えられました。このリリースにアップグレードすると、オプショントラッカーによってこのデータにusedメンバーが追加または更新されなくなります。
詳細については、Option Tracker Status Variables および Option Tracker Supported Componentsを参照してください。(WL #16721)
- オプショントラッカーをサポートする各機能で、option_tracker_usage:feature_nameというグローバルステータス変数が提供されるようになりました。この変数は、機能が使用された回数を示します。この変数は、オプショントラッカーコンポーネントがインストールされているかどうかに関係なく提供されます。
設定関連
- Microsoft Windows: --install-sample-databaseオプションは、MySQL Configurator CLIによって無視されました。(バグ #37701034)
- Microsoft Windows: MySQL Configurator CLIは、configureを除き、--actionオプションで指定されたアクションを一切実行しませんでした。(バグ #37473745)
- Microsoft Windows: MySQL 9.1.0から9.2.0へのアップグレード中に、MySQL Configuratorはmy.ini設定ファイルを見つけられず、そのファイルパスを手動で選択する必要がありました。(バグ #37468826)
- Microsoft Windows: コマンドで --old-instance-protocolオプションを使用しない限り、MySQL Configurator CLIによるデフォルト以外のインスタンスポートを持つ既存サーバーのアップグレードは失敗しました。(バグ #37459238)
廃止および削除関連
- NDB Cluster: NDB 8.0.16で非推奨となった、ndb_restoreの--restore-privilege-tablesオプションが削除されました。(バグ #36298807)
- レプリケーション: replica_parallel_workersサーバーシステム変数は0に設定できなくなり、許容される最小値は1になりました。(WL #13957)
- MySQL 8.0.14で非推奨となった、システム変数 innodb_undo_tablespacesが削除されました。(WL #16746)
- MySQL 8.0.30で非推奨となった、システム変数 innodb_log_file_sizeとinnodb_log_files_in_groupが削除されました。(WL #16743)
- MySQL 9.2.0で非推奨となった、Version Tokensプラグインが、このリリースで削除されました。(WL #16614)
Doxygen関連
- サーバーのソースコードドキュメントで、以下の問題を修正しました:
- インデックスページは、MySQL 8.0 マニュアルにリンクしていました。この修正は、代わりにバージョン管理されていないリンクを使用することで、バージョン管理の問題を回避します。
- protocol_classic.ccでは、パラメータの型とフラグの説明が不明瞭でしたので、改善しました。
(バグ #117391、バグ #117503、バグ #37559971、バグ #37607749)
- COM_STMT_PREPAREレスポンスパケットに関するサーバーのソースコードドキュメントで、以下の問題を修正しました:
- ペイロード仕様は、警告数を確認するための間違った条件を示しました。
- 最初の例から不要なパイプ文字 (|) を削除しました。
(バグ #117373、バグ #37552681)
- サーバーのソースコードドキュメントにおける以下の問題を修正しました:
- MySQLクライアント/サーバー通信プロトコルドキュメントのAuthSwitchRequestに関するスペルミスを修正しました。
- protocol_classic.cc: OKパケットとEOFパケットを区別するためのテーブルが誤った演算子を使用していましたが、これは修正されました。
- COM_FIELD_LISTにおけるデフォルト値の送信に関する、これまでドキュメント化されていなかった動作についてドキュメント化しました。
(バグ #117325、バグ #117374、バグ #117596、バグ #37534532、バグ #37552684、バグ #37645678)
SQL関数とオペレーター関連
- 重要な変更: SQL関数は、リリース間で改良されると、以前は発生しなかった状況でSQLエラーをスローすることがあります。これがテーブルの制約、デフォルト式、パーティション式、または仮想列で発生すると、テーブルを開けなくなります。これにより、問題の分析(例えばSHOW CREATE TABLEなどを使用して)と対処(ALTER TABLE ... DROP ...文などを使用して)の両方ができませんでした。
現在は、サーバーのアップグレード時に、データディクショナリをスキャンして、前述のいずれかの機能を使用するテーブルを探します。これらのテーブルを開こうとして、開かない場合はユーザーに警告を表示します。このパッチはこれに対処します。このリリースで導入された--check-table-functionsサーバーオプションは、このような関数でエラーが発生した場合のサーバーの動作を指定できるようにすることで、この問題の解決に役立ちます。サーバーが開けなかったテーブルごとに警告をログに記録するためには、このオプションをWARNに設定します。ABORTに設定すると、これらの警告はWARNとしてログに記録されますが、問題が見つかった場合はサーバーのアップグレードが中止されます。
ABORTがデフォルトです。これにより、ユーザーは新しいバージョンのサーバーにアップグレードする前に、古いバージョンのサーバーを使用して問題を修正できます。WARNは問題にフラグを立てますが、ユーザーが問題に対処しながら対話型モードで続行できるようにします。(バグ #36890891)
参考: バグ #37009318 も参照してください。この問題は、バグ #98950、バグ #98951、バグ #31031886、バグ #31031888のリグレッションです。
INFORMATION_SCHEMA関連
- PROCESSLISTテーブルのパフォーマンスの問題を修正しました。(バグ #36778475)
InnoDB関連
- InnoDBはコンテナ対応のリソース割り当てをサポートするようになり、コンテナによって課される制限を遵守できるようになりました。InnoDB設定のデフォルト値は、システム全体のリソースに依存するのではなく、コンテナによって割り当てられた論理CPUと物理メモリに基づいて計算されるようになりました。
以下のシステム変数の値は、これらのリソース制限に基づいて計算および設定されます:- 以下の値は、論理CPUの数に基づいて計算されます:
- innodb_buffer_pool_instances
- innodb_page_cleaners
- innodb_purge_threads
- innodb_read_io_threads
- innodb_parallel_read_threads
- innodb_redo_log_capacity (--innodb-dedicated-serverが有効な場合のみ値が設定されます。)
- innodb_log_writer_threads
- 以下の値は、使用可能なメモリに基づいて計算されます。
- temptable_max_ram
- innodb_buffer_pool_size (value set only if --innodb-dedicated-server is enabled.)
(--innodb-dedicated-server が有効な場合のみ値が設定されます。)
Container Detection and Configurationを参照してください。(WL #16484)
- 以下の値は、論理CPUの数に基づいて計算されます:
JavaScriptプログラム
- 重要な変更:JavaScriptストアドプログラムは、エイリアスであるNUMERICを含むDECIMAL型を完全にサポートするようになりました。これは、JavaScriptプログラムで入力引数、出力引数、プリペアドステートメントのbind()パラメータ、および戻り値として使用できます。
精度を維持するために、MySQL DECIMALはデフォルトでJavaScript Stringに変換されますが、この動作を上書きして、decimalTypeオプションの値をNUMBER (またはmysql.DecimalType.NUMBER) に設定することで、代わりにNumberに変換することができます。
JavaScriptのBoolean、Number、String、およびBigInt値をDECIMAL(または NUMERIC)に変換できます。その他のJavaScript型をMySQLの10進数型に変換しようとしてもサポートされておらず、エラーが発生して拒否されます。
詳細情報と例については、Conversion to and from MySQL DECIMAL and NUMERICを参照してください。
JavaScriptストアドプログラムのサポートには、MySQL Enterprise Editionで利用可能なMultilingual Engine Component(MLE)が必要です。Multilingual Engine Component (MLE)を参照してください。 (WL #16747) - MLEコンポーネントをGraalVM Truffle バージョン 24.2.0を使用するようにアップグレードしました。(バグ #37668857)
- グローバル待機を含むライブラリをインポートすると内部エラーが発生しました。(バグ #37425528)
- エラー処理の問題により、sql/sql_class.ccでアサートが発生しました。(バグ #36777428)
- mle_session_reset()関数は、オプションの文字列引数で強化されました。この引数は、それぞれ、stderr、stdout、または両方をクリアするために、"stderr"、"stdout"、または"output"のいずれかの値を取ります。
引数なしで呼び出された場合、mle_session_reset()は、以前のバージョンのMySQLとまったく同じように動作します。そうした場合、stderrとstdoutの両方をクリアし、セッションのタイムゾーンをリセットし、スタックトレースをクリアします。これにより、mle_session_state()からの観測可能な出力が削除されます。
詳細については、JavaScript Stored Programs—Session Information and Optionsを参照してください。
mle_session_reset()は、MySQL Enterprise Editionの一部であるMLEコンポーネントによって提供されます。このコンポーネントの詳細については、Multilingual Engine Component (MLE)を参照してください。(WL #16660) - MySQL JavaScriptプログラムは、Intlグローバルオブジェクトをサポートすることで、数値、日付、その他の値のローカライズと国際化に対応できるようになりました。MySQLロケールは、アンダースコアをダッシュ文字に置き換えることで JavaScriptロケールにマッピングされます。例えば、lc_time_names = "ja_JP"に設定すると、JavaScriptはロケールに対して"ja-JP"を返します。
オブジェクトのtoLocaleString()メソッドを呼び出すか、Intlフォーマットオブジェクトのいずれかを使用することで、ストアドプログラム内のセッションロケールまたはデフォルトロケールをオーバーライドすることもできます。
特定のセッションでJavaScriptストアドプログラムが初めて呼び出された時に有効なロケールは、セッションがリセットされるまで、lc_time_namesを新しい値に設定した後でも、そのストアドプログラムのデフォルトのロケールのままになります (ロケールを明示的に上書きしない限り)。
詳細と例については、JavaScript Localization and Internationalizationを参照してください。(WL #16709) - このリリースには、JavaScriptライブラリSQLに関するいくつかの変更と追加が含まれています:
- ALTER PROCEDUREステートメントとALTER FUNCTIONステートメントは、USING句を受け入れるようになりました。これにより、指定されたJavaScriptストアドプロシージャまたはストアドファンクションによってインポートされたライブラリのリストを追加、置換、または削除できます。詳細と例については、これらのステートメントの説明を参照してください。
- CREATE LIBRARYは、COMMENT句をサポートするようになりました。このコメントは、SHOW CREATE LIBRARYおよびSHOW LIBRARY STATUSの出力に表示されます(次の項目を参照)。また、Information Schema ROUTINESテーブルのROUTINE_COMMENT列にも表示されます。LIBRARIESテーブルには、この値を表示するためのLIBRARY_COMMENT列も追加されています。
- このリリースでは、1つ以上のJavaScriptライブラリに関する基本情報を提供するSHOW LIBRARY STATUSステートメントも実装されています。SHOW PROCEDURE STATUSと同様に、このステートメントは出力をフィルタリングするためのLIKE句とWHERE句をサポートしています。
- このリリースで実装されたALTER LIBRARYステートメントを使用すると、JavaScriptライブラリのコメントを更新できます。
- このリリースで追加されたステータス変数 Com_alter_libraryとCom_show_library_statusは、それぞれ、ALTER LIBRARYステートメントとSHOW LIBRARY STATUSステートメントの回数を示します。
JavaScriptストアドプログラムに関する一般的な情報については、JavaScript Stored Programsを参照してください。また、Multilingual Engine Component (MLE)も参照してください。(WL #16737)
JSON関連
- デフォルトのsql_modeでDEFAULTを指定したJSON列を含むテーブルを作成することは可能でしたが、このテーブルに対するSHOW CREATE TABLEの出力は、別のmysqldで実行すると、2番目のmysqldのsql_modeもnon-strictであった場合でも、BLOB, TEXT, GEOMETRY or JSON column ... can't have a default valueというエラーになりました。
この問題は、BLOB列またはTEXT列では発生しませんでした。(バグ #116479、バグ #37219226) - WHERE EXISTS( SELECT ... FROM JSON_TABLE(...) ) を使用したクエリは、期待どおりの結果を返しませんでした。(バグ #114897、バグ #3666073)
MySQL Enterprise関連
- Option Trackerコンポーネントに、従来のMySQL OptimizerとMySQL Hypergraph Optimizer (MySQL HeatWaveでのみ利用可能) という2つのMySQL機能のサポートが追加されました。
詳細については、Option Tracker Supported Componentsを参照してください。(WL #16548)
オプティマイザ関連
- 以前のバージョンのMySQLでは、subquery_to_derived最適化が有効になっている場合、クエリのWHERE句で定量比較演算 =ANY (INに相当) または <>ALL (NOT INに相当) のいずれかを使用した、サブクエリに対応する派生テーブルとの内部結合または外部結合への変換がサポートされていました。このリリースでは、このオプティマイザスイッチの機能が2つの方法で拡張されています:
-
- 現在、このような比較は全てサポートされています (>ANY、>=ANY、<ANY、<=ANY、>ALL、>=ALL、<ALL、<=ALL、=ANY、<>ALL)。
- このような比較の変換は、SELECT句とWHERE句でサポートされるようになりました。
詳細と例については、Optimizing ANY and ALL Subqueriesを参照してください。(WL #13052)
参考: バグ #37616992も参照してください。
パフォーマンススキーマ関連
- PERFORMANCE_SCHEMAサービススレッド v7が公開されていなかったため、コンポーネントによる使用が妨げられました。(バグ #37579218)
- Linuxプラットフォーム上のテレメトリエンドポイントにネットワーク名前空間を設定できるようになりました。以下のシステム変数が追加されました:
- telemetry.otel_exporter_otlp_traces_network_namespace
- telemetry.otel_exporter_otlp_metrics_network_namespace
- telemetry.otel_exporter_otlp_logs_network_namespace
(WL #16735)
追加または変更された機能
- 重要な変更:このリリース以降、同じシリーズ内であっても、個々のMySQL Innovationシリーズのリリース間でダウングレードすることはできなくなりました。例えば、バージョン9.3.1がリリースされた場合、MySQL 9.3.1にアップグレードした後、9.3.0にダウングレードすることはできません。(バグ #37387488)
- 重要な変更:OpenSSLライブラリがバンドルされているプラットフォームでは、MySQL Serverへのリンク付きOpenSSLライブラリがバージョン3.0.16に更新されました。詳細については、OpenSSL 3.0 Series Release NotesおよびOpenSSL Security Advisory (11th February 2025)をご覧ください。(バグ #36033684)
- パフォーマンス:クエリ結果に含まれるバイナリ値(16進文字列として出力)に関するmysqlクライアントの出力処理が最適化され、バイナリ値を含む大きな結果セットの出力がわずかに高速化されました。 (バグ #37334107)
- Enterprise Linux 10 (EL10) のサポートを追加しました。(バグ #37592019)
- handlerton drop_database_t APIのシグネチャが変更されました。データベースパスではなく、データベース名をパラメータとして受け入れるようになりました。この変更により、APIの効率が向上しました。(バグ #37191149)
- mysqldumpユーティリティは、このリリースで導入された --usersコマンドラインオプションを指定して実行すると、ユーザーアカウントに関する情報の論理ダンプを作成し、適切なCREATE USERおよびGRANT SQLステートメントをダンプに書き込むようになりました。
--add-drop-userオプションも含めることで、mysqldumpによって生成されるCREATE USERステートメントの前にDROP USERを追加することができます。
--include-userまたは--exclude-userのいずれかのオプションを使用して、ダンプから特定のユーザーアカウントを含めたり除外したりすることもできます。
詳細情報と例については、上記のオプションの説明、およびmysqldump — A Database Backup Programを参照してください。(バグ #28038954、WL #15658) - mysqlクライアントは、クエリ実行時間を小数点以下3桁の精度でミリ秒単位で表示するようになりました。
(バグ #117270、バグ #37510263)
主なバグ修正
- InnoDB: 特定の状況下において、get_better_lower_bound_for_already_active_id()中のTrx_by_id_with_min::insert()が誤ったs_lower_bound値を設定する可能性がありました。(バグ #37548045)
- InnoDB: innobaseコードの複数の箇所で発生していた潜在的なメモリリークを修正しました。(バグ #37403052)
- InnoDB: 特定の状況下において、修正済みまたはダーティなページが原因で、MySQLがシャットダウン中にクラッシュする可能性がありました。以下のようなエラーがログに記録されました:
[ERROR] [MY-011908] [InnoDB] [FATAL] Page [page id: space=46, page number=75] still fixed or dirty [ERROR] [MY-013183] [InnoDB] Assertion failure: buf0buf.cc:5889:ib::fatal triggered thread 139963705668608
(バグ #37391519)
参考: バグ #35115601も参照してください。 - InnoDB: 空間インデックスのCHECK TABLEは、クラスター化インデックスレコードに格納されているジオメトリMBR に対してMBRを検証しませんでした。これにより、空間インデックスの動作が不正になる可能性がありました。
本リリース以降、CHECK TABLE EXTENDEDは、MBRがクラスター化インデックスレコードに格納されているMBRと一致することを検証します。 (バグ #37359538) - InnoDB: 悲観的な行更新に関する問題を修正しました。
(バグ #37292404) - InnoDB: CHECK TABLE操作で空間インデックスでの破損が誤って報告される可能性がありました。(バグ #37286473)
- InnoDB: InnoDB REDOログのリカバリに関する問題を修正しました。(バグ #37061960)
- InnoDB: index_id値の読み取りに関する問題を修正しました。(バグ #36993445、バグ #37709706)
- InnoDB: 特定の状況下で、InnoDBエンジンが範囲終了チェックのために不要な変換を実行する場合にアサーションエラーが発生しました。
この結果、次のようなエラーが発生しました:Assertion failure: lob0lob.cc:897:trx == nullptr || trx->is_read_uncommitted()
(バグ #35006212)
- InnoDB: lower_case_table_namesに関する問題を修正しました。(バグ #32288105)
- InnoDB: 別のクライアントセッションによってテーブルの定義が変更されている間に、パーティションテーブルインデックスのレコード数を取得する際に、そのテーブルインデックスがチェックされませんでした。レコード数はエラーなく取得されました。
このリリース以降、レコード数を取得する際にインデックスが使用可能であることを確認するようになりました。(バグ #117459、バグ #37617773) - InnoDB: リストア操作に対するBPR_PCUR_*の位置指定に関連するコードをリファクタリングしました。(バグ #117259、バグ #37505746)
参考: この問題は、バグ #37318367のリグレッションです。 - InnoDB: MySQL 8.0.30でinnodb_spin_wait_delayに加えられた変更により、パフォーマンスに悪影響がありました。(バグ #116463、バグ #37212019)
- InnoDB: 特定の状況下で、ALTER TABLEでINPLACEを指定して列のサイズを変更すると、インデックスが有効サイズ制限(767バイト)を超える場合がありました。これは、行形式がRedundantまたはCompactであるテーブルで発生し、行形式がテーブルの作成時に明示的に定義されていませんでした。
このリリースでは、検証が実行され、無効なインデックスサイズをもたらすALTER TABLE、INPLACE操作によってエラーが返されます。(バグ #116353、バグ #37168132) - InnoDB: Clone_persist_gtidスレッドにおけるメモリリークを修正しました。
(バグ #107991、バグ #34454572) - パーティショニング: パーティションテーブルのパーティションキーの一部ではない列にNOW()を挿入すると、全てのパーティションが取得され、プルーニングは発生しませんでした。 (バグ #37397306)
- レプリケーション: rpl_opt_tracker.ccにおける潜在的な競合状態を削除しました。(バグ #37644518)
- レプリケーション: ログサニタイザーはリレーログファイルを分析する際に、まず開始点(ローテーションイベントやトランザクション終了など)を検索しますが、場合によっては、必要なGTIDを含むバイナリログファイルが関連データがないとして削除される可能性がありました。その結果、ポイントインタイムリカバリプロセスは、欠落したGTIDが適用されるのを待機している間、無期限にハングしました。現在、このような場合、分析は開始点が確立されるまでトランザクション境界の解析をスキップするようになりました。(バグ #37635908)
- レプリケーション: ソースレプリカ構成において、レプリカで、同じテーブルに対してER_KEY_NOT_FOUNDエラーが発生し、UPDATEおよびDELETEステートメントが不規則に失敗しました。(レプリカのバイナリログとGTIDレコードは、要求された行がコミット済みであり、削除または更新されていないことを示していました。)これは、使用された行マッチングアルゴリズムがHASH_SCANであり、同じテーブル内の2つの行に同じCRC32値がある場合にレプリカで発生しました。
このようなCRC32の衝突が発生した場合、ハッシュテーブルで一致するCRC32が見つかったとしても、正しい行が更新されていることは保証されません。そのため、アルゴリズムは同じCRC32を持つ複数のエントリを反復処理し、ループ内でそれぞれのレコード全体を比較します。この問題は、このループを終了するロジックが誤っていたために発生しました。このロジックは修正されました。(バグ #37462058) - レプリケーション: レプリカスレッドの終了を担当するプロセスを強制的に削除されたオブジェクトにアクセスさせることが可能であることがテスト中に判明しました。(バグ #37375269)
- レプリケーション: asynchronous_connection_failover_delete_source()関数は、必ずしも全てのケースで期待どおりに動作しない場合がありました。(バグ #36479088)
- レプリケーション: 一部のケースで、asynchronous_connection_failover_add_source()関数が期待どおりに動作しない場合がありました。(バグ #36479083)
- レプリケーション: 一部のケースで、MASTER_POS_WAIT()が期待どおりに動作しない場合がありました。(バグ #36421684、バグ #37709187)
- レプリケーション: 一部のケースで、asynchronous_connection_failover_add_managed()関数が期待どおりに動作しない場合がありました。 (バグ #34648589)
- レプリケーション: サーバーの書き込み負荷が高い場合、パフォーマンススキーマのlog_statusテーブルに表示されるgtid_executedのバイナリログ位置が、バイナリログファイルに表示されるgtidのものと一致しませんでした。
この問題は、コミットパイプライン内のトランザクションが確実に完了するように、クエリ時にlog_statusテーブルのロック範囲を拡大することで修正しました。これにより、log_statusテーブルに対するクエリは、gtid_executedが完全に更新されるまで待機するようになり、バイナリログ内の位置との一貫性が保証されます。(バグ #102175、バグ #32442772) - グループレプリケーション:セカンダリがグループに参加すると、全てのグループメンバーがパフォーマンススキーマのreplication_group_member_statsテーブルのCOUNT_TRANSACTIONS_ROWS_VALIDATING列の値を無制限に増加させ始めることがありました。これは全てのグループメンバーのメモリ消費に影響を与え、この動作を引き起こしたセカンダリグループメンバーを再起動するか、場合によってはグループ全体を再起動することで軽減されない場合は、最終的にはスラッシングにつながります。
分析により、グループレプリケーションの開始操作に問題があることが示されました。この操作では、以前のグループ参加からのgroup_replication_applierチャネルに部分的なトランザクションがあるかどうかを確認します。見つかった場合、全ての完了したトランザクションを適用し、そのリレーログを消去した後、このチャネルが停止され、その後チャネルが再起動されます。その後、分散リカバリが実行され、グループメンバーから欠落しているデータを適用します。
この問題は、group_replication_applierチャネルを停止するためのグループレプリケーションパイプライン操作によって、certifierモジュールからの定期的なタスクが誤って停止され、一部の定期的な内部操作が実行されなくなったために発生しました。これらのタスクの1つは、コミット済みトランザクションの定期的な送信でした。この省略により、認証のためのガベージコレクションが妨げられ、その結果、パフォーマンススキーマ replication_group_member_statsテーブルのCOUNT_TRANSACTIONS_ROWS_VALIDATINGが継続的に増加しました。
この問題を解決するために、group_replication_applierチャネルを停止するパイプライン操作がcertifierモジュールに干渉しないように対策を講じました。これにより、COUNT_TRANSACTIONS_ROWS_VALIDATINGに誤った値が追加されることも防止されます。(バグ #37613510) - グループレプリケーション:グループレプリケーションの実行中、GTID_NEXTが指定された空のトランザクションやDDLステートメントなど、一部のトランザクションには書き込みセットがない場合があります。したがって、これらを並行して適用できるかどうかは不明であり、このため、グループレプリケーションは悲観的なアプローチに従い、これらを順番に実行し、パフォーマンスに影響が出る可能性があります。
DDLは順番に適用される必要がありますが、空のトランザクションに対してそのような動作を強制する実際の理由はないため、この修正により、空のトランザクションを他の非依存トランザクションと同時に適用できるようになります。(バグ #37597512、バグ #37569333) - グループレプリケーション:同じ条件変数を2回連続してテストする冗長なGCSコードを削除しました。(バグ #37538338)
- グループレプリケーション:プライマリ i1と2つのセカンダリ i2とi3を使用してグループレプリケーションを実行しているグループで、プライマリのメモリ使用量が多いために断続的な問題が発生し始めました。セカンダリはプライマリが到達不能であると報告し始め、その後再び到達可能であるとし、プライマリも同様に、セカンダリが断続的に到達可能であると報告し始め、その後到達可能であると報告しました。このような不安定な状態が続いた後、セカンダリは元のプライマリ (i1) を除外し、新しいプライマリ (i2) を選出しました。
このような状況では、以前のプライマリ (i1) の performance_schema.replication_group_membersテーブルに対するクエリでは、mysqldプロセスがi1で再起動されるまで、長期間 (12時間以上)、i1はONLINEおよびPRIMARY、i2はONLINEおよびSECONDARY、i3はONLINEおよびSECONDARYとして報告されました。
観察された問題は、セカンダリの1つが過負荷になり、グループから断続的に離脱したり参加したりし、その接続がプライマリサーバーで繰り返し切断され再作成された時に、元のプライマリ (i1)で発生したことが判明しました。再接続プロセス中に、プライマリは接続を作成しようとした時にハングし、単一のXComスレッドがブロックされました。これは、MySQL 8.0.27で非同期形式から同期形式に変更されたXCom通信スタック上のSSL_connect()呼び出しに起因していました。ノードが過負荷になると、SSL_connect()呼び出しに応答しなくなり、接続側が無期限にブロックされたままになる可能性があります。
これを修正するために、非ブロッキングである方法で接続し、タイムアウトの場合は戻り、再試行は呼び出し元 (この特定のケースでは、別のノードに再接続しようとする時のXComスレッド) に任せるようになりました。 (バグ #34348094、バグ #36047891)
参考: バグ #37587252も参照してください。 - mysqldumpのfprintf_string()関数は、文字列のエスケープ処理に実際の引用符を使用しませんでした。(バグ #37607195)
- overflow_bitset.hのコードをクリーンアップしました。(バグ #37591520)
- 文字セットと照合順序を参照する際に、std::stringではなくstd::string_viewを使用します。これにより、メモリの割り当てと解放のコストを削減できます。(バグ #37586193)
- 以前の修正後に未使用のまま残っていたコードを削除しました。(バグ #37574896)
参考:この問題は、バグ #28956360のリグレッションです。 - strings/ctype.ccで定義されているstarts_with()関数の代わりにstd::string::starts_with()を使用し、starts_with()の関数は不要になったため削除します。 (バグ #37568373)
- EXPLAINがサブクエリを正しく処理できないことがありました。(バグ #37560280)
- 照合名のエイリアスが、大文字と小文字を区別して処理される場合がありました。(バグ #37554688)
参考:この問題は、バグ #36878077のリグレッションです。 - デマングルされた関数名がスタックトレース内で512バイトを超える場合、関数名は切り捨てられ、改行は出力されませんでした。
本リリース以降、ファイル名やデマングルされた関数などの長い文字列は、出力に直接書き込まれます。(バグ #37543598) - mysqldump は出力において特定の特殊文字を適切にエスケープしていませんでした。今回の修正により、mysqldumpはString Literalsで説明されているルールに従うようになりました。(バグ #37540722、バグ #37709163)
- 関数インデックスを持つテーブルに対する一部の操作が正しく処理されませんでした。(バグ #37523857)
- RPMパッケージを使用してEnterprise Linuxプラットフォームにサーバーがインストールされた場合、component_log_sink_jsonをインストールした後、log_error_servicesを設定しようとするとエラーが発生しました。これは、JSONログファイルのファイルパスの権限の問題が原因でした。この問題は、本パッチで修正されました。 (バグ #37508168)
- INSTALL COMPONENTを使用して不明なコンポーネントをインストールしようとすると、正しく処理されない場合がありました。(バグ #37437317)
- COLLATE utf8_binなどのユーザー入力については、実際の照合順序 (この場合は utf8mb3_bin) を見つけるためにエイリアス検索を実行します。SQLエラーを報告する際には、入力文字列ではなく、この名前を使用するようになりました。(バグ #37412963)
- 実際には使用されていなかった内部変数binary_keywordを削除しました。(バグ #37408338)
- libmysqldにおいて、udf_handler::add()で集計に関してエラーが正しく処理されていませんでした。(バグ #37398919)
- 内部関数 check_if_server_ddse_readonly()から、特定のケースで未定義の動作が発生する可能性を排除しました。(バグ #37394933)
- 内部関数 recover_innodb_upon_upgrade()は使用されなくなったため、削除されました。(バグ #37394850)
- Audit Logプラグインは、JSON出力の書き込み時にエラーを正しく処理しませんでした。
詳細については、MySQL Enterprise Auditを参照してください。(バグ #37370439) - ER_SERVER_OFFLINE_MODEが正しく処理されない場合がありました。(バグ #37355755)
- BEFORE INSERTトリガーを持つテーブルに影響を与えるINSERTに続くUPDATEは、INSERTによってNOT NULL列がNULLに設定されている場合、有効なサーバーのsql_modeによって許可されているはずであるにもかかわらず、NULL値エラーで拒否されることがありました。(バグ #37337527)
- 場合によっては、コンポーネントが複数のクエリを実行するために同じ接続を再利用できないことがありました。(バグ #37286895)
- ストアドルーチンのエラー処理が改善されました。 (バグ #37193011)
- ストアドルーチンがプリペアドステートメント内で正しく呼び出されない場合がありました。(バグ #37077424、バグ #37292797)
- ストアド関数の準備中に見つかったエラーを削除しました。(バグ #36684438)
- SEL_ROOT::elementsのサイズをuint16からsize_tに増加しました。(バグ #36610878)
- マルチバイトUTF8の処理に関する問題を削除しました。(バグ #36593253)
- 集計を含むORDER BY句が正しく処理されない場合がありました。(バグ #36593244)
- UNION句を含むビューをクエリする際に、オプティマイザヒントが無視され、予期せずFORCE INDEXの使用が必要になりました。詳細については、Optimizer Hintsを参照してください。(バグ #36536936)
- 一部のサブセレクトが正しく処理されませんでした。(バグ #36421690)
- SETサブクエリに関するエラーが正しく処理されませんでした。(バグ #36335695)
- 特定のケースにおいて、無効なDDLステートメントが期待どおりに拒否されない場合がありました。(バグ #35721121)
- 内部関数 append_identifier()を改善しました。 (バグ #35633084)
- 通常、未使用のウィンドウ定義を持つビューは更新可能であるはずですが、サブクエリが含まれている場合、更新不可とマークされました。更新時にウィンドウは削除されましたが、更新を実行するには遅すぎました。
ウィンドウ定義の存在ではなくウィンドウ関数の存在をチェックし、マージ可能性をテストすることによって、この問題を解決します。これにより、ビューが更新可能になり、問題のあるUPDATEが成功します。(バグ #35507777) - 場合によっては、SETがプリペアドステートメントで正しく実行されませんでした。(バグ #35308309)
- PARTITION BY ... (DEFAULT (列)) が正しく処理されないことがありました。(バグ #35044654)
参考: この問題は、バグ #33142135のリグレッションです。 - この修正により、以下の問題が解決されます:
- Query_expression::is_set_operation() が正しく実行されないことがありました。
- DMLステートメントの一部のシーケンスによって、予期しない終了が発生する可能性がありました。
- ネストされたサブセレクトが正しく処理されないことがありました。
(バグ #34361287、バグ #35889583、バグ #35996409、バグ #36404149、バグ #37611264)
- Debianでは、パッケージ内のzipおよびgzipファイルに対して、dh_strip_nondeterminismが実行されなくなりました。(バグ #33791880)
- 無効なUTF8値に関する問題を削除しました。(バグ #27618273、バグ #37709687)
- 無効な識別子に関する問題に対処しました。(バグ #22958632、バグ #37709664)
- sql/statement/protocol_local_v2.cc内の初期化されていない変数を修正しました。(バグ #117541、バグ #37622633)
- LPAD()関数は、二重引用符で囲まれた空文字列が指定された場合、その文字列の長さが指定された長さ変数を超えない限り、正しい値を返しませんでした。(バグ #117227、バグ #37498117)
- NULLを含む複数の列 (ROW値) を比較する際に、NULLセーフ等価演算子 (<=>) が予期しない動作を示しました。演算子の実装を簡素化することで修正しました。(バグ #117168、バグ #37462769)
- クエリ内でORDER BY DESCとLIMITを含む多値インデックスを使用し、LIMITで指定された値が結果の実際の行数よりも大きい場合、パフォーマンスに悪影響が出ることが確認されました。 (バグ #117085、バグ #37436310)
参考:この問題は、バグ #104897、バグ #33334911のリグレッションです。 - MAX()をウィンドウ関数として使用すると、最初の行にデータが存在するにもかかわらず、ウィンドウフレーム内の最初の行に関してNULLが返されました。
これは、ウィンドウフレームの開始がN FOLLOWINGを使用して定義され、フレームがMAX()の引数と同じ式で降順で順序付けられ、エイリアスやテーブル参照などの構文のみが異なる可能性がある場合に発生しました。この問題を示す一連のステートメントを以下に示します:CREATE TABLE t0 (c0 INT); INSERT INTO t0 VALUES (1), (2); SELECT c0, MAX(c0) OVER (ORDER BY c0 DESC ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) FROM t0;
フレームの最初の行番号がプログラムロジックの適切な場所に設定されていることを確認することによって、これを修正します。(バグ #117013、バグ #37466984)
- mysqldumpによって生成されるINSERT IGNOREステートメント内の二重スペースを削除しました。
(バグ #116845、バグ #37353658) - 内部で使用される全てのACL変数の型をAccess_bitmaskに変更しました。
(バグ #116737、バグ #37318159) - include/assert_grep.incのエラーにより、それを含むファイルから誤った結果が返される可能性がありました。
(バグ #116239、バグ #37105430、バグ #37675340) - あるクライアントセッションにコミットされていないトランザクションがあり、それが別のクライアントセッションのDROP TABLEステートメントをブロックした場合、3番目のクライアントセッションはUSE DATABASEステートメントを発行しようとした時にハングします。(バグ #115706、バグ #36892499)
- sql/ssl_init_callback.ccにおいて、ssl_session_cache_timeoutの最大値が86400ではなく、84600と定義されており、84600は1日の長さ (秒) であると誤って記述されていました。
(バグ #115165、バグ #37354555) - mysqldumpクライアントのメモリリークを削除しました。(バグ #111793、バグ #35621833)
- 未使用のInnoDBおよびNDBハンドラのget_tablespace()メソッドを削除しました。(バグ #109443、バグ #34916556)
全ての変更点やバグ修正については、以下のページをご覧ください。
MySQL 9.3.0 リリースノート(MySQLウェブサイト):
https://dev.mysql.com/doc/relnotes/mysql/9.3/en/news-9-3-0.html
MySQL Editions
MySQLのサブスクリプションは、24時間365日体制でお客様をサポートいたします。さらに MySQL Enterprise Edition では、データベース管理者支援ツール MySQL Enterprise Monitor やバックアップツール MySQL Enterprise Backup をご利用いただけます。