監査ログ関連
- audit_log_encryption_password_get(keyring ID)が呼び出された場合、サーバーが予期せず終了する可能性がありました。(Bug #33296125)
- このバージョンでは、以下の新しい監査ログステータス変数が導入されました:
- audit_log_file_count (監査プラグイン)
- audit_log.file_count (監査コンポーネント)
この変数は、audit_log_format=JSONの場合に監査ログプラグインまたはコンポーネントによって生成された監査ログファイルの数を報告します。この値は、自動ローテーション時に増加し、プルーニング処理時に減少します。(WL #17292)
コンパイル関連
- MySQLで使用されるlibfido2のバージョンが1.17.0にアップグレードされました。(Bug #39478664)
- comp_errユーティリティにおける潜在的なメモリリークが修正されました。(Bug #36532183)
コンポーネント関連
- command-serviceのデフォルトDOMコンシューマは、SQLのNULLフィールドをリテラルNULL文字列として格納し、バッファリングされた行からstrlen()を使用してフィールド長を再計算しました。このため、SQLのNULLと実際の「NULL」値が区別できなくなり、バイナリ値が埋め込みNULバイトの位置で切り詰められるという問題が発生しました。(Bug #39405458)
- ステートメント結果のメタデータサービスは、field_info("type")をストアドプログラムの引数型として公開します。その値は、必ずしもColumn_metadata::typeに格納されている生のMySQLフィールド型とは一致しないため、コンシューマは結果のメタデータから元のフィールド型の値を取得できません。
今回のリリースでは、生のMySQLフィールド型の値を反映させるために、コンポーネントセーフなmysql_field_type_t型およびMYSQL_FIELD_TYPE_*値がservices/bits配下に追加されました。この型は、既存の型の動作を維持しつつ、新しいメタデータキー field_info("mysql_type")で使用されます。(Bug #39359509) - 以前のリリースでは、コマンドサービスを利用するコンシューマには、コマンドサービスのMYSQL接続において追加のクライアントフラグを設定または読み取るための公開APIである mysql_command_optionsが用意されていませんでした。
新しいコマンドサービスオプションである MYSQL_COMMAND_CLIENT_FLAGSは、クライアントフラグをmysql_real_connect()に渡します。
カスタムコンシューマは、引き続きMYSQL_TEXT_CONSUMER_CLIENT_CAPABILITIESを使用してコマンド機能をオーバーライドできます。コールバックデリゲートは、引き続きMYSQL_COMMAND_CLIENT_FLAGSを認識しません。(Bug #39349732) - コマンドサービスコンシューマは、MYSQL_Hハンドルから、スキーマ、システム変数、トランザクション、GTIDの変更といったセッション追跡情報を汎用的に取得することができませんでした。
新しい mysql_command_session_stateサービスにより、キャッシュされたセッション追跡エントリへのイテレータベースのアクセスが可能になりました。このキャッシュはコマンドごとに更新され、リセット時やエラー発生時にはクリアされます。また、複数の結果を返すコマンドの最新の完了状態を保持し、コンシューマーが現在のセッション状態に一貫してアクセスできるようにします。(Bug #39330990)
データディクショナリ関連
- データディクショナリの検証は、ENUM定義に加え、要素を含まない無効なSET定義もチェックするようになりました。
(Bug #36357937)
非推奨と削除関連
- 以下のレプリケーションシステム変数は、このリリースで非推奨となり、今後のリリースで削除される予定です:
- group_replication_communication_stack
- group_replication_ip_allowlist
(WL #17300)
INFORMATION_SCHEMA関連
- information_schema.tables.auto_incrementにおいて、大きなAUTO_INCREMENT値(INT64_MAXを超える値)が切り捨てられていました。(Bug #116149, Bug #37077567)
InnoDB関連
- InnoDB: SET GLOBAL innodb_redo_log_encrypt = ON;の処理中に発生する可能性のある競合状態を修正しました。(Bug #39484886)
- InnoDB: Cloneの検証に関連する問題を修正しました。(Bug #39252970)
- InnoDB: バージョン管理されていない ROW_FORMAT=REDUNDANTの行において、row_upd_rec_in_place()で発生していたデバッグアサーションの問題を修正しました。(Bug #39165747)
- InnoDB: バッファプールのサイズ変更中、innodb_adaptive_hash_index=ONであっても、mysqld-auto.cnf内でAdaptive Hash Indexが無効化される可能性があります。(Bug #39157211)
- InnoDB: テーブルのメンテナンスおよびクリーンアップに関連する問題を修正しました。(Bug #39091376)
- InnoDB: ユニークインデックスに関連する問題を修正しました。(Bug #38501299)
- InnoDB: InnoDBバッファプールのインデックス統計において、INFORMATION_SCHEMA.INNODB_CACHED_INDEXES.N_CACHED_PAGESの値が、テーブルのページ数やバッファプールの容量を超える値を含め、不自然に高い値として報告される可能性があります。このメトリックは現在、バッファプール構造内で追跡対象インデックスのキャッシュされたリーフインデックスページをカウントし、ページの再利用、分割・結合操作、圧縮ページ、空間インデックス、およびSDIを適切に処理します。(Bug #30164033)
- InnoDB: テーブルの作成、トランケート、または削除が頻繁に行われるワークロードでは、古いエントリが保持されるため、InnoDBのキャッシュされたインデックス統計マップが非常に大きくなる可能性があります。新しいインデックスエントリを追加すると、ページラッチが保持されている間に高価な内部マップメンテナンスがトリガーされ、他のトランザクションが長時間待機する可能性があります。
InnoDBは、btr_create()がページ変更を開始する前に統計エントリを事前に作成するようになりました。これにより、コストがかかる可能性があるマップのメンテナンスがラッチに依存する作業の外に移動され、インデックス作成時やテーブルのトランケート時の長時間にわたる競合が軽減されます。(Bug #120441, Bug #39509101) - InnoDB: ReadViewオブジェクトは、トランザクションスレッドとパージスレッドの両方によって頻繁にアクセスされる侵入型リストを通じて共有されます。それらのパディングは、リストリンクノードを別のCPUキャッシュラインに保持し、これらの同時操作間のキャッシュ競合を回避することを目的としていました。ただし、実装は、64バイトのキャッシュラインを想定し、リストノードのサイズに基づいてパディングを計算しました。これでは、意図した分離が確実に提供されませんでした。
パディングは、プラットフォーム固有の完全なInnoDBキャッシュラインが予約するようになりました。これにより、ハードコーディングされた前提が削除され、リストリンクノードがオブジェクト内のその位置に関係なく他のReadViewフィールドから確実に分離されるため、異なるハードウェアプラットフォームでの誤った共有のリスクが軽減されます。
(Bug #116878, Bug #37569394) - InnoDB: 特定の状況下では、既存のテーブルにAUTO_INCREMENTカラムを追加する時に、そのテーブル内の一部のレコードがスキップされ、AUTO_INCREMENTカラムの値が不正確になる可能性がありました。
(Bug #115136, Bug #37105825) - InnoDB: WITH_INNODB_EXTRA_DEBUGを有効にしたソースビルドは失敗する可能性がありました。
(Bug #114455, Bug #37706575) - MySQL Cloneプラグインは、更新されたCalVerモデルをサポートします。
- バージョン文字列が一致する場合、クローニングが許可されます。
- 特定のバージョンのパッチバージョン間でのクローニングが許可されます。
- あるLTSのDonorから次のLTSのRecipientへのクローニングが許可されます。
- あるLTSのドナーからより古いLTSのレシピエントへのクローニングは許可されません。
- あるLTSのドナーから後のLTSのレシピエントへのクローニングは許可されません。シーケンス内の次ではないLTS。
- ドナーまたはレシピエントのいずれかがLTSではなく、かつメジャーバージョンやマイナーバージョンが一致しない場合、クローニングは許可されません。
(WL #17317)
- InnoDBのundoテーブルスペースの作成およびトランケート処理は、ローカルのundoトランケートログファイルに依存しなくなりました。undoトランケートの進行状況情報がUndo Tablespaceヘッダーに保存されるようになりました。
このリリース以降、undoトランケートログは生成されません。注意 下位互換性のため、既存のトランケートログファイルは引き続きサポートされますが、新しいトランケートログは作成されません。 (WL #16989, WL #17187)
JSON関連
- ネストされた子ベーステーブルから行を削除するJSONリレーショナルデュアリティビューの更新が、外部キー制約に違反する可能性がありました。JSON Duality Viewの更新処理では、挿入や更新が実行される前に、バインディング順序とは逆の順序で削除が実行されるようになりました。(Bug #39566804)
- JSON Schema検証に関連する問題を修正しました。(Bug #39489024)
- JSONの日付値の処理に関連する問題を修正しました。(Bug #39361343)
- ネストされた配列の処理に関連する問題を修正しました。(Bug #39255759)
- メタデータの検証に関連する問題を修正しました。(Bug #39255734)
- RETURNING DATETIMEおよびDEFAULT値を指定したJSON_VALUE()は、式が DATE コンテキストで使用された場合に無効な定数日付を返す可能性があり、述語や結合に暗黙的な影響を及ぼす可能性がありました。日付に絞り込む前に、日時値が抽出されるようになりました。(Bug #120788, Bug #39649893)
MySQLプログラム関連
- --replaceオプションを使用してmysql.innodb_table_statsおよびmysql.innodb_index_statsテーブルをダンプする時、mysqldumpはREPLACEコマンドに対してIGNORE句を追加しました。
(Bug #119810, Bug #38939358) - mysql_tzinfo_to_sqlが不要な警告を生成しました。例:
Warning: Unable to load '/usr/share/zoneinfo//iso3166.tab' as time zone. Skipping it. Warning: Unable to load '/usr/share/zoneinfo//leap-seconds.list' as time zone. Skipping it. Warning: Unable to load '/usr/share/zoneinfo//leapseconds' as time zone. Skipping it. Warning: Unable to load '/usr/share/zoneinfo//tzdata.zi' as time zone. Skipping it. Warning: Unable to load '/usr/share/zoneinfo//zone.tab' as time zone. Skipping it. Warning: Unable to load '/usr/share/zoneinfo//zone1970.tab' as time zone. Skipping it.このリリースでは、それらの警告は抑制されるようになりました。
(Bug #115021, Bug #36624161) - mysqldumpに、--extended-insert-multilineオプションが追加されました。このオプションは--extended-insertと併用することで、テーブルのデータを各行ごとに別々の行として書き出すことができます。
--extended-insert-multilineはデフォルトでは無効です。
(Bug #112719, Bug #35912859)
オプティマイザー関連
- subquery_to_derivedに関連する問題を修正しました。(Bug #39525738)
- 定数式に対してGROUP BY ... WITH ROLLUPを使用し、かつ USE INDEX FOR GROUP BY()ヒントを空で指定した、ハイパーグラフオプティマイザを使用するクエリは、最適化中にアサーション失敗が発生する可能性があります。
このリリースでは、オプティマイザが定数のグループ化にはインデックスの順序付けが不要であることを認識するようになり、有効なストリーミング集計プランが選択可能になりました。(Bug #39505077) - ROLLUPクエリに関連する問題を修正しました。(Bug #39501528)
- decimalデータの集計におけるエラー処理に関連する問題を修正しました。(Bug #39474810)
- LEFT JOINに対するEXPLAINの実行に関連する問題を修正しました。(Bug #39461426)
- 一部の日時式および地理空間式が、アサーション失敗を引き起こす可能性がありました。(Bug #39279682, Bug #39280411)
- エラー処理に関連する問題を修正しました。(Bug #39272322)
- ユーザー変数処理に関連する問題を修正しました。(Bug #39243027)
- 特定の条件下で、ハイパーグラフオプティマイザを使用する述語の多いクエリが、アサーション失敗を引き起こす可能性がありました。(Bug #39181175)
- subquery_to_derivedが有効な場合の共通テーブル式に関連する問題を修正しました。(Bug #39179197)
- ExtractValue()における問題を修正しました。(Bug #39138426)
- ハイパーグラフオプティマイザを使用する複雑なクエリにおいて、セカンダリエンジンがインストールされていない場合でも、セカンダリエンジンの行数フックを繰り返しチェックすることで、不要なプランニング時間を費やしてしまう可能性がありました。
オプティマイザはクエリごとに1回このフックの検索結果をキャッシュするようになり、プランニングのオーバーヘッドが削減されました。(Bug #39015463) - ヒストグラムの更新後にテーブルを開くと、ヒストグラムのメタデータロックが不適切に解放されたために、アサーションエラーが発生する可能性がありました。
ヒストグラムのメタデータロックは、現在オープンされているテーブルに対してのみ解放されるようになりました。(Bug #38940484) - 動的スキャン実行に関連する問題を修正しました。
(Bug #38657550) - BETWEENを定数の境界値とともに使ったクエリでは、ハイパーグラフオプティマイザを使用している場合、本来は正確なインデックス範囲スキャンだけで済むはずが、その上に不要なフィルタ操作が表示されることがありました。
このリリース以降、オプティマイザはこれらの範囲条件を正確なものとして認識し、冗長なフィルタ処理を削除します。(Bug #37152269) - マテリアライズされた派生テーブルを含むクエリでは、一時インデックスの構築コストがその利点を上回る場合であっても、インデックスルックアップの計画が選択されることがありました。
このリリースでは、ハイパーグラフオプティマイザがこれらの計画を評価する時に一時インデックスの構築コストを考慮するようになり、派生テーブルを含むクエリのプラン選択が改善されました。(Bug #36957877) - マテリアライゼーションに基づく重複排除を使用したSELECT DISTINCT ... LIMITクエリでは、制限が適用される前にすべての重複排除済み行が処理される場合があり、少数の一意の行のみが要求された場合でもパフォーマンスの低下を招く可能性がありました。
ハイパーグラフオプティマイザがクエリの制限を重複排除処理に渡すようになったため、必要な数の一意の行が見つかった時点で処理を停止できるようになりました。SQL_BIG_RESULTによって強制されるソートベースのDISTINCTプランに変更はありません。(Bug #36720017) - LIMITが低いクエリにおいて、必要な結果行数がわずかであっても、ハッシュ結合が不要なディスクへのスピル I/Oを実行することがありました。
このリリース以降、ハイパーグラフオプティマイザは、ディスクへのスピルとインメモリの両方のハッシュ結合プランを考慮し、コストベースの最適化において、適切な場合にはより高速なインメモリのオプションが優先的に選択されるようになりました。(Bug #36684053) - 副作用を伴うストアドファンクションや、RAND() のような非決定的な関数を使用したORDER BYの式は、ハイパーグラフオプティマイザによって1行につき複数回評価される可能性があり、その結果、予期せず副作用が繰り返し発生することがありました。
このリリースでは、影響を受けるクエリにおいてソートの前に行がマテリアライズされるようになったため、これらの式は1行につき1回だけ評価されます。最上位レベルのUPDATE文やDELETE文、およびセカンダリエンジン向けに最適化されたクエリは、影響を受けません。(Bug #36578540) - 複数のクエリブロックから同じ共通テーブル式(CTE)を参照するクエリにおいて、内部一時インデックス名が重複して生成される可能性がありました。
CTEがディスク上にマテリアライズされる時、InnoDBが誤った内部インデックスを選択し、その結果、クラッシュ、アサーション失敗、“table does not exist”エラー、あるいは不正なクエリ結果が発生する恐れがありました。
インデックスがスロット間で移動される時、内部的な一時インデックス名が再生成されるようになりました。これにより、生成される各インデックスの名前が一意かつ一貫して維持されます。
(Bug #36492739) - 特定の状況下で、IFNULLを使用したフィルタが誤った結果を返しました。(Bug #36448705)
- UNION ALLは、記述された順序で子クエリを評価します。EXISTSやLIMITを使用すると、より低コストなブランチが即座に行を生成できる場合に、高コストなブランチが先に評価されてしまう可能性がありました。(Bug #35767452)
- BETWEEN述語を含むIS TRUE条件を否定した場合、NULL状態の処理が正しく初期化されていなかったため、DECIMAL値に対して誤った結果が返される可能性がありました。(Bug #120540, Bug #39444505)
- SQL_BUFFER_RESULTと併用した場合、ASCII()などの関数のAVG()は、計算された10進数の精度に符号用の領域が確の領域が確保されていなかったため、切り捨てられた値を返す可能性がありました。
このリリースでは、10進数の精度の計算において符号付きの値が正しく考慮されるようになり、255.0000のような有効な結果が切り捨てられるのを防ぎます。(Bug #120465, Bug #39392429) - 以前のバージョンでの修正により、IFNULL()がNULLを正しく処理しませんでした。(Bug #120429, Bug #39347654)
参照: この問題は、Bug #37285902のリグレッションです。 - 以前のバージョンでの修正により、スカラーサブクエリとその外側のクエリが同じCTEを参照した場合、WHEREの等価条件が既存の行と一致しなくなるという問題が発生しました。
この修正は、派生テーブルの一時キーを所有していないクエリブロックによって、それらのキーがクリーンアップされるのを防ぎます。これにより、外側クエリの最適化中に正しいキーメタデータが保持され、結果の正しい照合が保証されます。(Bug #120403, Bug #39321676)
参照:この問題は、Bug #35912840のリグレッションです。 - ANDやIS NULLを含むWHERE条件がプッシュダウンされるUNIONおよびUNION ALLクエリにおいて、誤った行が返される可能性がありました。
条件プッシュダウンは、集合演算のブランチにおいてWHERE述語のセマンティクスを保持するようになりました。(Bug #119780, Bug #38888307) - ネストされたマージ済みのビューや外部結合を含むクエリにおいて、定数式を含むビューの列が外部結合のNULL補完の前に評価されると、誤った結果が返される可能性がありました。
オプティマイザは、マージされたビューの列について、内部テーブルの正しい依存関係を保持します。これにより、外部結合式や関連するWHERE条件が適切な段階で評価されることが保証されます。(Bug #119499, Bug #38729126)
参照:本件は、Bug #35854686のリグレッションです。 - IS NULLでインデックス付き列をフィルタリングするクエリは、同じ列がORDER BYに含まれている場合、不要なファイルソートを実行する可能性がありました。
このリリースでは、オプティマイザがIS NULLをORDER BYの簡略化における定数条件として認識するようになりました。これにより、適切な場合にはインデックスの順序を利用できるようになります。
(Bug #119442, Bug #38700622) - ORDER BY、低いLIMIT、および複合インデックスに対する逆範囲スキャンを含むクエリは、オプティマイザがソート操作を早期に削除した場合、誤った結果を返す可能性がありました。
このリリース以降、オプティマイザは逆インデックス範囲スキャンを選択する前に、順序付けに必要なすべての主要要素を考慮するようになりました。
(Bug #119198, Bug #38564020) - NULLIF()が生成する日時値が適切な時間型処理に基づいて評価されなかったため、CAST(NULLIF(...) AS DATETIME)が誤った結果を返す可能性がありました。
IF()およびNULLIF()式における日時関連の評価が適切に処理されるようになりました。その結果、YEAR式にNULLIF()を適用した場合、YEARデータ型が保持されるようになりました。そのため、関連する集計式はDOUBLEではなくDECIMALを返す可能性があります。
(Bug #118053, Bug #37875484) - 一意のインデックスに対するFORCE INDEXは、単一のインデックスを強制するという予期される動作とは対照的に、IS NULL述語に対してインデックスダイブが実行される可能性がありました。
この場合、オプティマイザはインデックスダイブをスキップするようになりましたが、選択された範囲に対して有効な場合に限り、引き続きインデックス統計を使用します。
(Bug #117791, Bug #37751691) - GREATEST()、LEAST()、またはCOALESCE()によって返される日時関連の結果において、クライアントプロトコルやCOLLATION()関数を介して誤った照合順序が報告される可能性がありました。日時関連の値はバイナリ照合順序を使用しますが、これらの汎用関数は必要な変換を適用しませんでした。現在、これらの関数からの日時関連の結果は、正しくバイナリ照合順序を報告するようになっています。
(Bug #117543, Bug #37626671) - マテリアライズド一時テーブルに対してCONSTアクセスを使用するクエリは、インメモリ一時テーブルがオンディスクテーブルに変換された後に、誤った結果を返す可能性がありました。
このリリース以降、変換後に一時テーブルの読み取り状態がリセットされるようになり、期待される行が引き続きアクセス可能であることが保証されます。
(Bug #116741, Bug #37308710) - OR条件を含む一部のLEFT JOINクエリにおいて、EXPLAIN上では動的範囲アクセスと表示されていましたが、実行時には依然として内部テーブルのフルスキャンが行われていました。これは、オプティマイザが範囲アクセスの評価時に、適切な外部結合述語を認識しなかったために発生しました。
オプティマイザは動的範囲分析においてこれらの述語を考慮するようになったため、対象となるLEFT JOINクエリでは、内部テーブル全体を繰り返しスキャンする代わりに、外部の各行に対して再計画されたインデックス範囲スキャンを利用できるようになりました。
(Bug #113288, Bug #36061036) - 一部のLEFT JOINクエリでは、オプティマイザによる書き換えによって、ハッシュ結合の構築時に非等価条件が適用されなくなる可能性がありました。その結果、フィルタリングの前に、必要以上の行がハッシュテーブルに追加される可能性がありました。
オプティマイザは、可能な場合、対象となる述語をビルド側のテーブルに再マッピングするようになりました。これにより、内部結合のフィルタリング動作を変更することなく、より早い段階でのフィルタリングと、より効率的なハッシュ結合の実行が可能になります。
(Bug #112198, Bug #35749693) - GROUP BY ... WITH ROLLUPによって生成された派生テーブルの列に名前を割り当てるクエリでは、ウィンドウ関数がそれらの名前のいずれかで並べ替えを行うと、「Unknown column」エラーが報告されることがありました。
マテリアライズドロールアップフィールドが派生テーブルの列名を保持するようになったため、それらの参照が正しく解決されるようになりました。
(Bug #112112, Bug #35722845) - 1つ以上のCTE定義を使用して作成されたビューを使用すると、構文エラーが発生する可能性がありました。
(Bug #111559, Bug #35536775) - トリガーを伴う複数テーブルのUPDATE後、キャッシュされたテーブルが一時的なNULL状態を保持し、その結果、厳密なSQLモード下で後続の有効なステートメントが警告を発したり失敗したりすることがありました。以下のようなエラーが返されました:
ERROR 1048 (23000): Column 'columnName' cannot be null(Bug #110962, Bug #35373634)
- TIMESTAMPDIFF()は、WHERE句と組み合わせて使用されると、予期しない結果を返しました。(Bug #108143, Bug #34499767)
- 冗長なコードを削除することで、explain_filename()の実装が簡素化されました。
(Bug #104169, Bug #33064492)
パッケージング関連
- このリリースをもって、MySQLはEnterprise Linux 7(および関連するglibc 2.17 generic)のサポートを終了しました。
パフォーマンススキーマ関連
- OBJECT_INSTANCE_BEGIN列に関連する問題を修正しました。(Bug #39449066)
- 以前のバージョンでの修正により、プリペアドステートメントのダイジェストにおいてパフォーマンスのオーバーヘッドが発生しました。(Bug #38809758)
参照: これは、Bug #36445818のリグレッションです。 - 同じSQL_DIGESTを持つクエリは、ORDER BY句の違いなど、異なる特性を持っていても、同一のサマリーを生成する可能性がありました。ダイジェストの計算方法を改善し、これらのクエリをより適切に区別できるようにしました。
(Bug #31103386, Bug #115943, Bug #36997723)
レプリケーション関連
- 重要な変更:MySQL 26.7では、マルチスレッドレプリケーション用のレプリカSQLアプライヤーの新しい実装である、Change Stream Applier (CSA)が導入されます。CSAは、マルチスレッドアプライヤー(MTA)に代わる、チャネル単位で選択可能な機能です。モジュール式のスケジューリングおよび実行設計を使用することで、トランザクションの並列適用を改善し、チャネルごとにレプリケーションリソースを設定可能にするとともに、将来的なレプリケーション機能強化の基盤を提供します。CSAは、既存のレプリケーションチャネルコマンドおよびリレーログを引き続き使用します。レシーバースレッドやストレージエンジンのインターフェースに変更はないため、ソース側のレプリケーションプロトコルを変更することなく、サポート対象チャネルを移行することが可能です。
CSAは、以下を可能にします:- チャネルごとに個別にレプリケーションアプライヤーを設定する。
- すべてのチャネルに対して単一のグローバル値に依存するのではなく、チャネルごとに1~1,024個のCSAワーカースレッドを設定する。
- トランザクションの適用とコミット順序の分離。ワーカーがまだコミットできない時、待機状態で何もせずにいるのではなく、依存関係の解決が済んでいる別のトランザクションを適用できます。
- リレーログに記録されたトランザクションの並列読み取りを可能にし、トランザクションが消費されるにつれて、キャッシュされたイベントメモリを解放する。
- 非アクティブなリレーログファイルについて、そのすべてのコンシューマーによる処理が正常に完了し、かつそれより前のリレーログファイルもすべて削除対象となっている場合に、当該ファイルを削除する。失敗したコンシューマーは必要なファイルを保持し、後続のファイルがそれより先に削除されるのを阻止する。
- STOP REPLICAへの応答性を向上させ、いずれかのCSAチャネルでエラーが発生した場合に他のチャネルが稼働し続けるようにする。
- Performance Schemaを介して、CSAの設定とワーカーの状態を公開する。
以下のチャネルオプションが追加されました:
- APPLIER_VERSION = 1|2: アプライヤーの実装を選択します。
- 1: マルチスレッドアプライヤー。新規チャネルのデフォルトです。
- 2: CSA
- APPLIER_WORKER_COUNT: CSA専用。チャネルごとのCSAワーカー数を設定します。範囲は1~1024です。新規チャネルで省略した場合、replica_parallel_workersが使用されます。
- APPLIER_EVENT_MEMORY_LIMIT: CSA専用。バイナリログイベントのチャネルごとのキャッシュ制限を設定します。新しいチャネルで省略された場合のデフォルトは0です。有効なキャッシュ制限は少なくともreplica_max_allowed_packetの値と同等である必要があり、それより低い値を設定すると警告が生成されます。
例:
CHANGE REPLICATION SOURCE TO APPLIER_VERSION = 2, APPLIER_WORKER_COUNT = 8, APPLIER_EVENT_MEMORY_LIMIT = 1073741824 FOR CHANNEL 'channel_name';既存のチャネルを更新するためには、まずSQLスレッドを停止する必要があります。
CSAが有効な場合、以下の機能はサポートされません:
- ステートメントベースまたは混合形式のバイナリログ。
- ファイル位置ベースのレプリケーションチャネル。
- GTIDが無効なソースからのレプリケーション、または、ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS。
- ON以外のGTID_MODE値。
- GTID_ONLY=0またはREQUIRE_ROW_FORMAT=0。
- 遅延レプリケーション (SOURCE_DELAY)。
- トランザクションの一部をスキップするためのsql_replica_skip_counter。
- SQL_BEFORE_GTIDSおよびSQL_AFTER_GTIDS以外のSTART REPLICA ... UNTIL条件。
- replica_pending_jobs_size_max; 代わりにCSAイベントキャッシュの制御にはAPPLIER_EVENT_MEMORY_LIMITを使用してください。
- IGNORE_SERVER_IDS。適用済みのGTIDは自動的にスキップされるため、GTIDレプリケーションでは不要です。
- レガシーVCLE。
- 拡張アプライヤー統計。
(WL #10500)
- レプリケーション: REPLICATION_APPLIERを使用したクライアントBINLOGの実行に関連する問題を修正しました。(Bug #39474825)
- レプリケーション: ハートビート処理に関連する問題を修正しました。(Bug #39377010)
- レプリケーション: log_replica_updatesが無効になっている書き込み可能レプリカにおいて、ローカルでのコミットとアプライヤーの処理が同時に行われると、競合状態が発生する可能性がありました。(Bug #39259437)
- レプリケーション: イベントのローテーション処理に関連する問題を修正しました。(Bug #39253359)
- レプリケーション:SOURCE_RETRY_COUNT=0が設定されたレプリケーションレシーバーは、SOURCE_RETRY_COUNT=0が無制限の再接続試行を許可しているにもかかわらず、その後の一時的な接続切断後に停止してしまう可能性がありました。この不整合により、追加の再接続エラーがログに記録されることなく、レシーバーが終了してしまう可能性がありました。
レプリケーションにおいて、再接続パス全体でSOURCE_RETRY_COUNT=0が一貫して無制限として扱われるようになりました。これにより、一時的な障害が繰り返された後でも、レシーバーが再試行を継続し、処理に追いつくことが可能になります。(Bug #39086875) - レプリケーション: エラー処理に関連する問題を修正しました。(Bug #38924622)
- レプリケーション: 明示的に空の認証データを指定したALTER USER文が、空の認証文字列を保持せずにバイナリログ用に書き換えられました。その結果、password_expiredエラーが発生しました。(Bug #38478657)
- レプリケーション: アプライヤユーザーを使用してレプリケーションチャネルが設定された場合、CREATEおよびDROPステートメントに対する権限チェックが失敗することがありました。これは、それらの権限がそのユーザーに対してデータベース固有のレベルでのみ付与されていた場合に発生しました。(Bug #37587555)
- レプリケーション: 特定の条件下において、binary_log_transaction_compression_statsテーブルに対して複数のクエリを同時に実行すると、サーバーがエラーで停止する可能性がありました。(Bug #36196212)
- レプリケーション: explicit_defaults_for_timestampが無効になっていた場合、NULL入力から格納済みの生成済みTIMESTAMP NOT NULL列を再計算する時に、行ベースのレプリカ適用やmysqlbinlogリプレイが停止する可能性がありました。以下のようなエラーが返されました:
Could not execute Write_rows event on table tablename; Column 'timestamp_col2' cannot be null, Error_code: 1048; handler error No Error!現在は、フィールドのデフォルトを使用して行が適用され、警告が発行されます。(Bug #120128, Bug #39182574)
- 検証に関連するいくつかの問題を修正しました。(Bug #39234600, Bug #38673268, Bug #38673285, Bug #38712932, Bug #39253416, Bug #39282368, Bug #39253383, Bug #39253491, Bug #39254867, Bug #39254885, Bug #39254896, Bug #39254914, Bug #39282350, Bug #39319907)
- このリリースに伴い、group_replication_communication_stackのデフォルト値がXCOMからMYSQLに変更されました。(WL #15709)
セキュリティ関連
- MySQLは、OpenSSL 3.5.0以降において、TLS 1.3接続での耐量子暗号(PQC)をサポートするようになりました。これにより、ハイブリッドな従来型/PQCグループを含むPQC対応のTLS鍵交換グループのネゴシエーションや、PQC TLSハンドシェイク署名アルゴリズムのアドバタイズが可能になります。
以下のシステム変数が導入されます:- force_pqc: PQC互換の鍵交換グループでネゴシエーションされたメインのTLS接続のみを受け入れます。
- admin_force_pqc: PQC互換の鍵交換グループでネゴシエーションされた管理者用TLS接続のみを受け入れます。
- replication_force_pqc: 非同期レプリケーションのTLS接続に対し、PQC互換の鍵交換グループの使用を必須とします。
- group_replication_force_pqc: Group ReplicationのリカバリTLS接続に対し、PQC互換の鍵交換グループの使用を必須とします。
- mysqlx_force_pqc: PQC互換の鍵交換グループでネゴシエーションされたX PluginのTLS接続のみを受け入れます。
- tls_kex: メインの接続チャネルで使用するTLS鍵交換グループ。
- admin_tls_kex: 管理接続チャネルで使用するTLS鍵交換グループ。
- replication_tls_kex: 非同期レプリケーションTLS接続に使用するTLS鍵交換グループ。
- group_replication_tls_kex: Group Replicationのリカバリ用TLS接続に使用するTLS鍵交換グループ。
- mysqlx_tls_kex: X PluginのTLS接続で使用するTLS鍵交換グループ。
- 以下のブール型システム変数は、どのアルゴリズムが通知されるかを定義します。有効にするとPQCが使用され、無効にすると従来のTLSハンドシェイク署名アルゴリズムのみがアドバタイズされます。
注意 有効に設定されているがPQCが利用できない場合は、OpenSSLのデフォルトが使用されます。 - use_pqc_sign: メイン接続チャネルでどのアルゴリズムがアドバタイズされるか。
- admin_use_pqc_sign: 管理接続でどのアルゴリズムがアドバタイズされるか。
- replication_use_pqc_sign: 非同期レプリケーション接続でどのアルゴリズムがアドバタイズされるか。
- group_replication_use_pqc_sign: Group Replicationのリカバリ接続でどのアルゴリズムがアドバタイズされるか。
- mysqlx_use_pqc_sign: X Plugin接続でどのアルゴリズムがアドバタイズされるか。
以下のステータス変数が導入されます:
- Tls_key_exchange_algorithm: 現在のTLS接続でネゴシエーションされたTLS鍵交換グループを示します。
- Tls_sign_algorithm: 現在のTLS接続でネゴシエーションされたTLSハンドシェイク署名アルゴリズムを示します。
- Mysqlx_force_pqc: 現在のXプラグインTLSチャネルに適用されている有効な設定の値。
- Mysqlx_tls_kex: 現在のXプラグインTLSチャネルに適用されている有効な設定の値。
- Mysqlx_use_pqc_sign: 現在のXプラグインTLSチャネルに適用されている有効な設定の値。
(Bug #39536947, WL #17245)
スレッドプール関連
- thread_pool_max_unused_threadsのデフォルト値が2から32に変更されました。(Bug #39405207)
- 以前はMySQL Enterprise Editionでのみ利用可能だった、MySQL Thread Poolプラグインが、MySQL Community Edition 26.7.0で利用可能になりました。(WL #17296)
Xプラグイン関連
- X Pluginのいくつかの問題を修正しました。(Bug #39268692, Bug #39268863)
追加または変更された機能
- 重要な変更: MySQL Serverは、9.7 LTSシリーズ以降のリリースにおいて、カレンダーベースのバージョニングを使用するようになりました。バージョン値には「年.月.パッチ (YY.M.P)」の形式を使用します。MySQL 26.7.0は、そのようなカレンダーバージョン方式を採用した最初のリリースです。
以下が、以前のLTSバージョンを識別するためにmysql_version.hに追加されました:- MYSQL_PREVIOUS_LTS_VERSION: 前のLTSバージョンの番号。例えば、MySQL 26.7.0の場合、「9.7.0」が前のLTSバージョンです。
- MYSQL_PREVIOUS_LTS_VERSION_ID: 前のLTSバージョンの識別子。例えば、「9.7.0」は90700として表されます。
mysql_version.hで定義されたバージョニングの系譜により、明確なアップグレードおよびダウングレードのパスが実現されます。(WL #17310)
- mysql.general_logおよびmysql.slow_logに対して実行されるALTER TABLE文を簡素化することで、MySQLのアップグレード時のパフォーマンスが向上します。
(Bug #118132, Bug #37944523)
バグ修正
- 空間データの処理に関する問題を修正しました。(Bug #39489004)
- Cloneプラグインにおけるいくつかの問題を修正しました。(Bug #39252316, Bug #39245805, Bug #39245844, Bug #39253040, Bug #39253103)
- 設定ファイルでinnodb_redo_log_encrypt=ONが定義されている場合、Oracle LinuxまたはRed Hat Linux 9でサーバーを起動できませんでした。(Bug #39181231)
- 接続属性の解析に関連する問題を修正しました。(Bug #39116965)
- INサブクエリがUNIONを含む派生テーブルを使用した場合、INサブクエリの結果を割り当てる UPDATE文において、アサーション・エラーが返される可能性がありました。(Bug #38911659)
- クライアントメッセージにおいて、一部のポーランド語文字が疑問符(?)に置き換わりました。(Bug #38036138)
- テーブルおよびメタデータロックのクリーンアップ後のテーブルメンテナンスステートメントのエラー処理に関連する問題を修正しました。
(Bug #37797437) - 自己参照外部キーを持つテーブルから行を削除すると、レプリケーションが失敗しました。(Bug #119996, Bug #39091367)
- ON DUPLICATE KEY UPDATEを伴うビュー経由でのINSERT ... SELECTにおいて、アサーション失敗が発生する可能性がありました。(Bug #119805, Bug #38901085)
- ターゲットバージョンで使用されるものとは異なるsql_modeの下で作成されたイベントを検証する時、サーバーのアップグレードチェックが失敗し、イベントがその元のコンテキストでは有効であってもアップグレードが中断される可能性がありました。(Bug #119672, Bug #39077967)
- LOAD DATAの実行中、入力行の解析が行われている間、フィールドを一時的にNULL許容としてマークすることができます。ある行がNOT NULLカラムに対してNULLを提供した場合、LOAD DATAは、同じスレッドに戻る前に、テーブルのフィールドを一時的なNULL状態のままにしてしまう可能性がありました。その後、同じセッション内の後続のINSERTで、有効な非NULL値がNULLとして扱われ、ER_BAD_NULL_ERRORが返される可能性があります。
(Bug #118060, Bug #38939847) - 変数 has_unique_keyが不要に割り当てられていました。
(Bug #118057, Bug #37876712) - 数千ものテーブル、ビュー、ルーチン、イベントを含む古い8.xリリースからアップグレードすると、サーバーによって消費されるメモリが継続的に増加し、大幅なメモリ使用量の急増を引き起こしました。
これらのシナリオにおいて、メモリ管理が改善されました。(Bug #117983, Bug #37832455, Bug #38031020) - NOW()は、定義された範囲(0~6)外の値を受け入れ、エラーを返しませんでした。(Bug #116307, Bug #37141651)
- 末尾にセミコロンを含むリライターパターンは、通常のステートメント実行によって生成されたクエリダイジェストに対して、一貫して読み込まれたり一致したりすることはありませんでした。
(Bug #116222, Bug #37100271) - key_object_cache_mutexとkey_object_loading_condが登録されませんでした。
(Bug #115524, Bug #36809659) - 以下は、予約キーワードとして適切に定義されていませんでした:
- CUBE
- EXTERNAL
- QUALIFY
- TABLESAMPLE
以下は、非予約キーワードとして適切に定義されていませんでした:
- MANUAL
- PARALLEL
(Bug #114874, Bug #36584265)
- INSERT()の動作は、マルチバイト文字に対して不適切でした。指定された位置が入力文字列の範囲外であっても、文字を挿入しました。
(Bug #113962, Bug #36289412) - 特定の状況下では、LEAST()およびGREATEST()が予期しない結果を返す可能性がありました。
(Bug #113304, Bug #36065440) - statement_digest()およびstatement_digest_text()におけるメモリリークを修正しました。(Bug #104115, Bug #33073320)
MySQL 26.7.0 リリースノート(MySQLウェブサイト):
https://dev.mysql.com/doc/relnotes/mysql/26.7/en/news-26-7-0.html
MySQL Editions

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