アカウント管理関連
- DROP USERの実行後にデータベースキャッシュが適切にフラッシュされませんでした。(バグ #37132323)
- パスワード検証の失敗が常に正しく処理されるとは限りませんでした。(バグ #37041439)
文字セットのサポート
- ビューに対するクエリで接続とクライアントの文字セットとしてutf8が使用され、ビューに非ASCII文字を含むリテラル値が含まれていて、クエリでビューのクエリブロックのUNIONに条件プッシュダウンが実行された場合、接続とクライアントの文字セットをlatin1に設定して作成されたビューから選択すると、結果が0行になりました (1行が期待されていました)。
この問題は、同様の問題のエラーを修正した以前の問題に関連していました。その場合の問題は、ビューに含まれる条件を内部クエリブロックにプッシュダウンする時に、ビュー定義の文字セットを適切に考慮していましたが、その時点で実装された修正では、ビューに非ASCII文字が含まれる可能性が考慮されていませんでした。
つまり、プッシュダウンされる条件が、間違った文字セットのテキスト文字列に書き込まれていました。文字列が正しい文字セットで作成されるようにすることで、この見落としを修正しました。(バグ #37111452)
参考: バグ #36246859も参照してください。
コンパイル関連
- macOS: MacOSビルドから古いCMakeコードを削除しました。(バグ #37258036)
- macOS: ld: warning: ignoring duplicate librariesという形式の警告とxcodebuildに固有の警告を削除しました。(バグ #37065301)
- Solaris: SolarisでMySQLをビルドするために必要なGCCの最小バージョンが11.4に引き上げられました。詳細については、Source Installation Prerequisitesを参照してください。 (バグ #37256600)
- CMake 3.26以降、CMakeはCMakeError.logに代わるCMakeFiles/CMakeConfigureLog.yamlファイルを書き込みます。そのため、CMakeError.logへの参照は削除されました。(バグ #37305289)
- MySQLをコンパイルするために使用されるlibeditのバージョンが20240808-3.1にアップグレードされました。 (バグ #37101293)
- XCode 16でMySQLをコンパイルした時に見つかった mysql_prepare_create_table() (ファイル sql/sql_table.cc内) のエラーを削除しました。(バグ #37068527)
- TIRPCの問題により、cmake 3.11を使用してFedora 40 (および、もしかすると他のLinuxプラットフォーム) でサーバーをビルドできませんでした。(バグ #116144、バグ #37080195)
コンポーネント関連
- サブクエリを使用したSET PERSISTと同時に発行されたINSTALL COMPONENTにより、サーバーが予期せず終了することがあります。(バグ #36559078)
参考: バグ #35647759も参照してください。
ファイアウォール関連
- 場合によっては、アップグレードを実行した後、MySQL Enterprise Firewallに関連するストアドプロシージャが正しく処理されませんでした。(バグ #36084822)
オプティマイザ関連
- WHERE句に集計関数が含まれる条件をプッシュダウンすると、集計関数が評価されるべきでない時に評価されてしまいます。(バグ #36421735)
パフォーマンススキーマ関連
- root以外のユーザーがSTART REPLICAを実行した場合、PERFORMANCE_SCHEMA.PROCESSLISTは、システムユーザーではなく、新しく生成されたフォアグラウンドレプリケーションスレッドにそのユーザーの名前を割り当てました。
このリリースでは、システムユーザーが全てのフォアグラウンドシステムスレッドに割り当てられます。(バグ #37357562) - 特定の状況では、メタデータロックを別のLOCK_TYPEにアップグレードまたはダウングレードできます。この変更は、PERFORMANCE_SCHEMA.METADATA_LOCKSテーブルには反映されませんでした。
(バグ #116625、バグ #37271768)
追加または変更された機能
- システムのcurlライブラリにリンクするのではなくcurlを含むバイナリパッケージは、curl 8.11.1を使用するようにアップグレードされました。 (バグ #37389565)
主なバグ修正
- 互換性のない変更: 最小境界矩形 (MBR) の最小限の変更を伴うジオメトリの更新の後に削除操作を実行すると、空間インデックスで破損が発生しました。
このリリースにアップグレードする場合、事前に空間インデックスを削除し、アップグレードの完了後にそれらを再作成することをお勧めします。あるいは、アップグレード直後、そのようなインデックスを削除して再作成することもできます。ただし、それらが含まれるテーブルを使用する前にです。以前のバージョンにダウングレードすると、前述の元の問題が再び発生することにも注意してください。
詳細については、Creating Spatial Indexesを参照してください。(バグ #36452528) - 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: プライマリキーを削除し、その後INPLACEアルゴリズムを使用して降順で新しい AUTO_INCREMENT列をプライマリキーとして追加できませんでした。
(バグ #36658450) - InnoDB: ユーザーテーブルスペースを拡張すると、ファイル拡張REDOログレコード (MLOG_FILE_EXTEND) が生成されますが、システムテーブルスペースを拡張すると生成されませんでした。(バグ #36511673)
- InnoDB: 自己参照外部キーとフルテキストインデックスを持つテーブルに対するDELETE操作でアサーションがトリガーされる可能性がありました。(バグ #36234681)
- InnoDB: REDOログ挿入 (MLOG_REC_INSERT) の共通プレフィックス圧縮は無効でしたが、バージョンが一致すると有効になりました。(バグ #34946626)
参照: この問題は、バグ #13899のリグレッションです。 - InnoDB: セカンダリインデックスを含む生成された列を含むON DELETE CASCADEは、削除前に仮想列テンプレートが初期化されていないため、失敗することがあります。
(バグ #33691659) - InnoDB: 子テーブルの更新ノードを構築中に更新操作で仮想列を更新しようとしましたが、外部キー制約では仮想列を参照できないため、更新すべきではありませんでした。(バグ #33327093)
- 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を実行しているグループからグループメンバーを削除し、それを後のバージョン (後のリリースシリーズから) にアップグレードし、その後グループに再度参加するように要求すると、アップグレードされたグループメンバーが回復状態でハングしました。
- エラー 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)
- sql/item_cmpfunc.ccで、Item_bool_func2::resolve_type()が Item_bool_func::resolve_type() への未チェックの呼び出しを行いました。Item_bool_func::resolve_type() への呼び出しは戻り値を無視し、エラーが発生した場合でも実行が続行されました。(バグ #37143289)
- AppArmorは、スタックトレースを生成するために必要なファイルである /proc/$pid/task/$thread_id/memへのアクセスを拒否しました。(バグ #37063288)
参照: バグ #37387034も参照してください。 - クエリがサブクエリ実行にindex_subquery結合タイプを使用し、サブクエリテーブルが実行プランでマテリアライゼーションを使用した場合、サブクエリのフィルター条件が無視されることがありました。派生テーブルアクセスパスがフィルター条件を置き換え、フィルターレイヤーのない最終プランになりました。これを修正するために、このような場合には、フィルターアクセスパスを置き換えるのではなく、派生テーブルアクセスパスをフィルターアクセスパスと一緒に追加するようになりました。 (バグ #36918913)
- 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)
- MySQLが予期せず終了した時にスタックトレースを出力する my_print_stacktrace() からの出力が改善されました。(バグ #34904177、バグ #36027494)
- FTSと同時実行DDLまたはDMLに関連する問題を修正しました。(バグ #34633727)
- 同じ名前のテーブルが存在する場合、DROP VIEW nameはER_BAD_TABLE_ERRORで拒否されました。(バグ #33200087)
- ハッシュテーブルが結合バッファに収まらずディスクにあふれた時、ハッシュアンチ結合を使用する一部のクエリによって誤った結果が返されました。 (この問題を引き起こしたクエリは実際にはLEFT JOINを指定していましたが、これは内部的に左外部結合からアンチ結合に変換されました。)
問題は、プローブ行をチャンクファイルに書き込む時にプローブテーブルの一部の行がスキップされることでした。スキップされた行は、結合キーの一部にNULLが含まれていた行です。このような行は、ビルドテーブルに一致がないことがわかっているため、内部結合とセミ結合ではスキップできますが、外部結合とアンチ結合では、ビルドテーブルに一致する行がないプローブテーブルの行は結合結果の一部である必要があるため、チャンクファイルに含める必要があります。
外部結合のチャンクファイルには、既にこれらの行が保持されています。この修正により、その目的で使用されるロジックが拡張され、アンチ結合にも適用されます。(バグ #116334、バグ #37161583) - MySQL 8.0以降では、SELECT DISTINCT ... FROM t1 WHERE NOT IN(SELECT ...) 形式のクエリは、可能な場合はアンチ結合に変換され、オプティマイザーはテーブル t1のグループスキップスキャンを選択しませんでしたが、MySQL 5.7では選択されていました。その結果、このようなクエリのパフォーマンスが低下しました。アンチ結合変換後はクエリは単一テーブルクエリではなくなり、このアクセスメソッドは単一テーブルクエリに対してのみ有効になるため、グループスキップスキャンは選択されません。セミ結合に変換されたクエリでも同じ動作が見られます。このような場合、グループスキップスキャンアクセスメソッドは、アクセスメソッドが重複の削除のみに使用される場合 (つまり、DISTINCTまたはGROUP BYを使用するが、集計関数を使用しない場合)、引き続き使用され得ます。
これを修正するために、クエリに集計関数が含まれていない限り、内部変換後に存在するセミ結合テーブルの数に関係なく、元のクエリにテーブルが1つしかない場合にはグループスキップスキャンを有効にします。(バグ #112632、バグ #35842412) - mysqlクライアントでは、オプティマイザーヒントコメント内で '#' または '--' を使用することができませんでした。
(バグ #98521、バグ #30875669)
全ての変更点やバグ修正については、以下のページをご覧ください。
MySQL 8.0.41 リリースノート(MySQLウェブサイト):
https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-41.html
MySQL Editions
MySQLのサブスクリプションは、24時間365日体制でお客様をサポートいたします。さらに MySQL Enterprise Edition では、データベース管理者支援ツール MySQL Enterprise Monitor やバックアップツール MySQL Enterprise Backup をご利用いただけます。