2024.07.04

MySQL

MySQL 9.0.0 Innovationリリース(リリース日:2024年7月1日)

監査ログ関連

  • MySQLは、プラグインのタイプに関係なく、有効なプラグイン構造体を引数としてplugin->deinit()を呼び出すようになりました。

C API関連

  • サーバー側のプリペアドステートメントの結果を受信中に、C APIアプリケーションが停止しました。

文字セット関連

  • REPLACE()関数の呼び出しを解決する際、関数結果の文字セットと照合順序は最初の引数からコピーされます。残りの2つの引数は、リテラル値の場合、この文字セットに変換される必要がありますが、2番目の引数のみが変換されました。
    この修正により、3番目の引数も最初の引数の文字セットと照合順序に変換されるようになります。(バグ #114769、バグ #36562972)
  • 内部関数 my_instr_mb()は、入力文字列のバイト長が特定の決定を短縮するために使用される可能性があるという誤った仮定をいくつかの場所で想定していました。マルチバイト文字セットと照合順序の場合、これは実行できません。一部の照合規則では、バイト長が異なる文字が等しいと見なされる可能性があるためです。さらに、Item_func_locate()は誤ったバイト長を使用していました。
    (バグ #113933、バグ #36277823)
  • 内部関数 Item_func::eq()は、2つの式 CONVERT(a USING latin1)とCONVERT(a USING utf8mb4)を誤って等しいものとして扱いました。

コンパイル関連

  • macOS: CMakeはMacOSでネイティブctagsの使用を試みなくなり、MySQL をビルドする時にシステムにHomebrewバージョンをインストールすることが必要になりました。(バグ #36590594)
  • macOS: MacOSでMySQLをビルドする時にgRPCの使用を有効にしました。(バグ #36537726)
  • バンドルされているgoogletestソースとgooglemockソースをバージョン 1.14.0にアップグレードしました。(バグ #36562482)
  • GenErrorへの不足している依存関係を追加しました。(バグ #36551721)
  • MySQLのコンパイルに使用されるBoostのバージョンが1.84.0から1.85.0にアップグレードされました。 (バグ #36495694)
  • Enterprise Linux 8および9のバイナリは、GCC 13を使用してビルドされるようになりました。(バグ #36331855)
  • RapidJSONを使用したコードをコンパイルする時に発生するリンカー警告を削除しました。(バグ #36322583)
  • Linuxシステムで、-DWITH_TCMALLOC=BUNDLEDを指定することによって、ソースで提供されているバンドルされたtcmallocライブラリを使用してMySQLをビルドできるようになりました。これはLinuxでのみサポートされています。(バグ #36313839)
  • Ubuntu 23.04でビルドする時にsql/statement/ed_connection.ccで発生する警告を削除しました。 (バグ #114436、バグ #36428465)
  • Linux aarch64プラットフォームバイナリは、ページサイズに4kまたは64kを使用するシステムとの互換性を保つために、patchelf --page-size=65536を使用してビルドされるようになりました。(バグ #114233、バグ #36393794)

コンポーネント関連

  • --looseプレフィックスを使用して設定されたコンポーネントオプションの値は、コンポーネントのインストール時に読み取られませんでした。(バグ #28341329)

設定関連

  • Microsoft Windows: Windowsでは、MySQL Configuratorが更新され、アップグレードパスに従ってインプレースアップグレードがサポートされるようになりました。(バグ #36685422)
  • Microsoft Windows: Windowsでは、MySQL Configuratorウィザードのページで[X]閉じるボタンをクリックすると、ウィザードが操作の実行中の場合、確認ポップアップが表示されるようになりました。(バグ #36671317)
  • Microsoft Windows: Windowsでは、MySQL Configuratorは、生成されたMySQL Server設定ファイルでカスタムserver_type変数を定義しなくなりました。この情報は、configurator_settings.xmlファイルに保存されるようになりました。(バグ #36670309)
  • Microsoft Windows: Windowsでは、my.iniファイルにmysqlx_port定義がない場合、MySQL ConfiguratorのWindowsファイアウォール削除手順が失敗していました。 (バグ #36666260)
  • Microsoft Windows: Windowsでは、MySQL ConfiguratorがMySQL Serverインストールページで有効なmy.iniまたはmy.cnfファイルを見つけられなかった場合、選択したファイルが有効であっても、”参照”ボタンをクリックすると”次へ”ボタンが無効になりました。(バグ #36395569)
  • Microsoft Windows: Windowsでは、関連するMySQL Serverが以前に設定されていた場合、MySQL Configuratorは削除手順のみが表示されるようになりました。(バグ #36395417)
  • Microsoft Windows: Windowsでは、現在、MySQL Configuratorは、既存のrootユーザーがmysql_native_password認証プラグインを使用しているかどうかを検出し (このプラグインはMySQL 9.0.0で削除されました)、MySQL Serverのアップグレードを実行する前に、rootをcaching_sha2_password認証プラグインを使用するように変換することを要求します。(WL #16139)
  • Microsoft Windows: WindowsでのMSIインストールの場合、MySQL Configuratorはユーザーの介入なしにMySQL 8.4 LTSインストールを自動的にアップグレードするようになりました。 (WL #16274)

データディクショナリ関連

  • 通常の列と生成された列が混在するMyISAMテーブルをMySQL 5.7から8.0以降にアップグレードしようとすると、テーブルが破損しました。(バグ #106301、バグ #35503328)

データ型関連

  • 文字列が数値に変換される時、数値の後に続く非数値データは、strictモードではエラーになり、その他のSQLモードでは警告になりますが、文字列の長さと文字セットによっては、無効な文字列で予期されるエラーや警告が発生しない場合があります。(バグ #36457756)
  • 場合によっては、doubleを整数値にキャストする時に丸めが使用され、他の場合には切り捨てが使用され、一貫性のない結果になりました。現在は、このような全ての場合に丸めが使用されます。 (バグ #114549、バグ #36481397)
  • 場合によっては、DECIMAL 0が0から-1までのFLOAT値より小さいものとして扱われていました。(バグ #114196、バグ #36361165)

非推奨と削除関連

  • MySQL 8.0で非推奨となったmysql_native_password認証プラグインは削除され、サーバーはCLIENT_PLUGIN_AUTH機能を持たない古いクライアントプログラムからのmysql_native認証要求を拒否するようになりました。下位互換性のため、mysql_native_passwordはクライアントでは引き続き使用できます。クライアント側の組み込み認証プラグインは、動的にロード可能なプラグインに変換されました。

    注意
    MySQL 8.0では、デフォルトのMySQL認証プラグインがcaching_sha2_passwordに変更されました。

    これらの変更により、次のサーバーオプションと変数も削除されました:

    • --mysql-native-passwordサーバーオプション
    • --mysql-native-password-proxy-usersサーバーオプション
    • default_authentication_pluginサーバーシステム変数

    (WL #15930)

  • パフォーマンススキーマのvariables_infoテーブルのMIN_VALUE列とMAX_VALUE列は廃止され、MySQLの将来のバージョンで削除される予定です。代わりに、同じ情報を提供するvariables_metadataテーブルのMIN_VALUE列とMAX_VALUE列を使用してください。(WL #15585)

イベントスケジューラ関連

  • 重要な変更: イベントに関連する次のSQLステートメントを準備できるようになりました:
    • CREATE EVENT
    • ALTER EVENT
    • DROP EVENT

    これらのステートメントでは位置パラメータ(? プレースホルダー)はサポートされていません。準備されるステートメントのテキストは、文字列リテラル、システム変数、およびユーザー変数の組み合わせから作成される必要があります。(バグ #109309、バグ #34875573、WL #16298)

オプティマイザー関連

  • 重要な変更: ER_SUBQUERY_NO_1_ROWは、IGNOREキーワードを含むステートメントによって無視されるエラーのリストから削除されました。これは、次の理由で行われました:
    • このようなエラーを無視すると、NULLが非NULL列に挿入される (変換されていないサブクエリの場合)か、行がまったく挿入されない (subquery_to_derivedを使用するサブクエリの場合)ことがありました。
    • サブクエリが派生テーブルと結合するように変換された場合、動作は変換されていないクエリの動作と異なります。

    このリリースへのアップグレード後、この変更により、複数の行を生成するスカラーサブクエリを含むSELECTステートメントが含まれている場合、IGNOREキーワードを含むUPDATE、DELETE、またはINSERTステートメントでエラーが発生する可能性があります。
    (バグ #110961、バグ #35373406)

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

  • このリリースでは、MySQLパフォーマンススキーマに次の2つのテーブルが追加されました:
    • variables_metadataテーブルは、システム変数に関する一般的な情報を提供します。この情報には、MySQLサーバーによって認識される各システム変数の名前、スコープ、タイプ、範囲 (該当する場合)、および説明が含まれます。
      このテーブルのMIN_VALUE列とMAX_VALUE列は、variables_infoテーブルの非推奨のMIN_VALUE列とMAX_VALUE列を置き換えることを目的としています。
    • global_variable_attributesテーブルは、サーバーによってグローバル システム変数に割り当てられた属性と値のペアに関する情報を提供します。

    (WL #15855)

SQL構文関連

  • JSON: EXPLAIN ANALYZEからのJSON出力を、次に示す構文を使用してユーザー変数に保存できるようになりました:
    EXPLAIN ANALYZE FORMAT=JSON INTO @variable select_stmt

    この変数は、MySQLのJSON関数のいずれかのJSON引数として、その後使用できます (JSON 関数を参照)。INTO句は FORMAT=JSONでのみサポートされ、明示的に含める必要があります。この形式のEXPLAIN ANALYZEでは、分析対象のSELECTステートメントの前に来るオプションのFOR SCHEMA句またはFOR DATABASE句もサポートされます。SELECT以外のステートメントはサポートされていません。

    注意
    この機能は、explain_json_format_versionサーバーシステム変数が2に設定されている場合にのみ使用できます。それ以外の場合、この機能を使用しようとすると、ER_EXPLAIN_ANALYZE_JSON_FORMAT_VERSION_NOT_SUPPORTEDが発生します。

    (WL #16216)

sysスキーマ関連

  • このリリースでは、innodb_lock_waitsビューのパフォーマンスが向上しました。(バグ #36337708)

Xプラグイン関連

  • システム変数 caching_sha2_password_digest_roundsを、Xプロトコルを使用してデフォルト以外の値に設定できませんでした。(バグ #36402455)
  • mysql_function_namesユニットテストソースファイル内のMySQLドキュメントへの古いリンクが更新されました。
    (バグ #113500、バグ #36137217)

主なバグ修正

  • InnoDB: ALTER TABLE操作後のUPDATEでMySQLが予期せず停止しました。(バグ #36571091)
    参照: この問題は、バグ #35183686のリグレッションです。
  • InnoDB: InnoDBリカバリロジックを改善し、リカバリアクション間の一時停止を減らしました。(バグ #36332645)
  • InnoDB: InnoDBによって実行されるファイルシステム操作は、ディレクトリ変更タスクを実行する時に、親ディレクトリを一貫してfsyncするようになりました。(バグ #36174938)
  • InnoDB: デバッグビルドで、innodb_interpreter_outputデバッグ変数を設定すると、サーバーが予期せず停止しました。これは読み取り専用変数になりました。(バグ #36041032)
  • InnoDB: os_innodb_umask処理を改善し、読み取り専用にしました。 (バグ #35932118)
    参照: この問題は、バグ #29472125のリグレッションです。
  • InnoDB: 2014年に最後に利用可能になった製品であるFusion IO アトミック書き込み機能に固有の機能を削除しました。(バグ #35072139)
  • InnoDB: 列インデックスが有効である時に、無効な列インデックスを参照するInnoDBアサーションエラーが発生しました。(バグ #34800754)
  • InnoDB: 空のXAトランザクションの場合、XA START後にサーバーをシャットダウンすると、サーバーが予期せず停止します。(バグ #32416819)
  • InnoDB: 空のXAトランザクションの処理中にレプリケーションアプライヤーまたはバイナリログアプライヤーをシャットダウンすると、システムが予期せず停止しました。(バグ #32416819)
  • InnoDB: Validate_files::check()関数での不要なヒープ使用を削除しました。
    (バグ #115041、バグ #36626203)
  • InnoDB: 潜在的なログ通知の遅延を防ぐために、notify_about_advanced_write_lsn()ロジックを改善しました。
    (バグ #114660、バグ #36528707)
  • InnoDB: パーティションテーブルがinnodb_parallel_read_threads=1で読み取られた場合、256回の読み取り後にどのテーブルからも読み取りパフォーマンスが大幅に低下しました。InnoDBは、並列読み取りスレッドを使用していないにもかかわらず、並列読み取りスレッドの最大容量に達したかのように動作しました。
    (バグ #114154、バグ #36347408)
  • InnoDB: get_next_redo_rseg_from_undo_spaces()から不要な条件チェックを削除しました。
    (バグ #113640、バグ #36185805)
  • InnoDB: 空間参照識別子(SRID)属性を持つ列を含む空間インデックスの結果が空でした。さらに、空間インデックスでFORCE INDEXを使用してカバーインデックススキャンを強制すると、アサーションが発生しました。 (バグ #112676、バグ #114200、バグ #35894664、バグ #36361834)
  • InnoDB: SELECT ... GROUP BYクエリは、TempTableエンジンでは Memoryエンジンよりも少なくとも2倍遅くなりました。(バグ #107700、バグ #34338001)
  • レプリケーション: ソースに、JSON関数によって入力された、保存された生成された列が含まれており、binlog_row_imageがMINIMALに設定されている場合、基になる列に対するその後の更新または削除は、次のエラーで失敗しました:
    Invalid JSON text in argument 1 to function json_extract: 'The document is empty.'

    レプリカは生成された列を再評価しようとしましたが、基になる列が利用できないため、そのエラーで失敗しました。このリリースでは、基になる列が利用できない場合、保存された生成された列は再評価されません。(バグ #36515172)

  • レプリケーション: エラー ER_SERVER_REPLICA_CONVERSION_FAILEDで返された列番号が正しくありませんでした。実際の値より1少ない値でした。 (バグ #36246205)
  • グループレプリケーション: /xcom/gcs_xcom_networking.ccからメモリリークが削除されました。(バグ #36532199)
  • グループレプリケーション: 特定の状況下では、新しいプライマリを正常に設定した後、group_replication_set_as_primary()は操作が完了するまで無期限に待機しました。
    このリリースでは、関数が不必要に待機しないようにするために定期的なチェックが実行されます。(バグ #36348650)
  • グループレプリケーション: REPLICATION_GROUP_MEMBERSテーブルのMEMBER_ID、MEMBER_HOST、およびMEMBER_PORT列がオフラインメンバーに対して常に入力されているわけではありませんでした。(バグ #36290046)
  • グループレプリケーション: 次のテーブルには、グループレプリケーションリカバリチャネルなど、設定されたホスト名を持たないレプリケーションチャネルのデータは含まれていませんでした:
    • REPLICATION_CONNECTION_STATUS
    • REPLICATION_CONNECTION_CONFIGURATION
    • REPLICATION_APPLIER_CONFIGURATION
    • REPLICATION_APPLIER_STATUS
    • REPLICATION_APPLIER_STATUS_BY_COORDINATOR
    • REPLICATION_APPLIER_STATUS_BY_WORKER

    このリリース以降、これらのテーブルには、部分的に設定されたグループレプリケーションチャネルのデータが含まれています。(バグ #36018242)

  • JSON: NULLIF()、COALESCE()、およびシフト (>>)演算子に、不足しているエラー処理チェックを追加しました。 (バグ #113668、バグ #35513196、バグ #36198403)
    参照: バグ #31358416 も参照してください。
  • MySQL NDB ClusterJ: ClusterJテストスイートを実行すると、スレッド数が存在しないというエラーメッセージが表示されました。これは、スレッドと接続の処理が誤っていたためで、このパッチで修正されました。(バグ #36086735)
  • <=>演算子を評価する時に必要とされる、不足しているエラーチェックを追加しました。(バグ #36570474)
  • CASE演算子を評価する時に必要とされる、不足しているエラーチェックを追加しました。(バグ #36570439)
  • 特定の数値の平均が常に正しく計算されるとは限りませんでした。(バグ #36563773)
  • 無効なGROUP BY結果やその他のエラーの原因となっていた、find_field_in_tables()のItem::m_table_refへの冗長な割り当てを削除しました。(バグ #36556725、バグ #36557029)
    参照: この問題は、バグ #36533080のリグレッションです。
  • stringsの次のファイルには、誤ったライセンス情報が含まれていました:
    • mb_wc.h
    • ctype-uca.cc
    • ctype-ucs2.cc
    • ctype-utf8.cc
    • dtoa.cc
    • strxmov.cc
    • strxnmov.cc

    (バグ #36506181)

  • 特定の異常なケースでは、UpdateXML()関数はその引数を全て正しく処理しませんでした。(バグ #36479091)
  • subquery_to_derived=ONの場合、派生テーブルへの変換後に外部参照が置き換えられないケースがありました。(バグ #36475633)
    参考: バグ #36314993も参照してください。
  • TIME値に関連するエラーのチェックが欠落しているため、sql/item.ccでアサートが発生することがありました。(バグ #36421511)
  • SRID属性を持つ列を含む空間インデックスでFORCE INDEXを使用したクエリを説明すると、予期しない終了が発生しました。(バグ #36418426)
  • ストアドプログラム内で作成されたイベントが常に正しく処理されるとは限りませんでした。 (バグ #36402968、バグ #35395333)
    参照: この問題は、バグ #17809、バグ #11745618のリグレッションです。
  • InnoDB OpenTelemetryメトリック(mysql.inno)は自動的に更新されませんでした。(バグ #36399090)
  • この修正により、次の2つの問題が解決されます:
    • GROUP BYリストに配置された項目を検索する時に、まだ修正されていない項目によって、include/sql_string.hでアサートが発生しました。
    • TIME_FORMAT()関数は、全てのケースでNULL引数を正しく処理しませんでした。

    (バグ #36367313、バグ #36367776)

  • BuildRequireルールを更新し、CMakeおよびBisonに現在必要なバージョンと一致させました。(バグ #36343254)
  • 内部関数 MY_COLLATION_HANDLER::strstr()から未使用の引数を削除しました。(バグ #36342997)
  • EXCEPT ALLセット操作を含むIN述語で間違った結果が生成されました。(バグ #36332697)
  • WHERE primary_key IN(SELECT constant1 EXCEPT SELECT constant2)を使用するクエリで、ORDER BY句の有無に応じて異なる行数が返されました。(バグ #36307622)
  • 式の参照カウントを増やす場合、この式内の基になる式は参照されません。式を削除する際、参照カウントを減らした後、基になる式も調べられ、その結果、意図せずして基になる式が削除されてしまいました。この問題は、Item_ref::real_item()と、sql/item.hのアサートで発生しました。現在の式に唯一残っている参照が含まれていない限り、基になる式を参照しないようにすることで、この問題は修正されました。(バグ #36204344、バグ #36356279)
  • 特定の条件下では、EXPLAIN FORMAT=JSON FOR CONNECTIONによって予期しない終了が発生することがありました。(バグ #36189820)
  • 特定の条件下では、競合状態により、TABLE_HANDLESによって使用されるRAMの量が最大9GBまで増加する可能性がありました。(バグ #36170903)
  • 一部のCREATE USERステートメントが正しく処理されませんでした。 (バグ #36022885)
  • ORDER BYとLIMITを含むSELECTの場合、オプティマイザーは最初に非常にコストのかかるフルテーブルスキャンを選択し、次に別のチェックを実行して、perform_order_indexタイプのパスを使用しましたが、これはオプティマイザープランのコストに反映されませんでした。(バグ #35930969)
  • レプリカでmysqldumpを実行すると、バイナリログに書き込む操作であるFLUSH TABLES操作が挿入されます。現在は、これらのバイナリログの変更によるレプリケーション中のGTID関連の問題を防ぐために、代わりにFLUSH LOCAL TABLESが挿入されます。
    回避策は、--source-dataオプションを1または2に設定することでした。(バグ #35665076)
    参照: この問題は、バグ #33630199のリグレッションです。
  • 全ての内部ACLビットマスク変数は、現在明示的に32ビット(uint32_t)です。(バグ #35507223)
  • FIND_IN_SET()に機能インデックスを追加できませんでした。(バグ #35352161)
  • 場合によっては、ORDER BY COUNT(*)を含む空のテーブルからのSELECT定数は、ビューで使用されると、行を返しませんでした。 (バグ #115035、バグ #36625752)
  • DDL操作が非常に多数のテーブルに対して実行された場合など、状況によっては、バックグラウンドヒストグラム更新からの警告でエラーログがあふれました。問題となっている警告は、テーブル上のメタデータロックの取得に失敗したことに関係するものでした。
    この問題を解決するために、バックグラウンドヒストグラム更新操作からエラーログに書き込まれるメッセージを制限し、そのレートを1分あたり1メッセージに制限しました。このレートは、ユーザーがバックグラウンドヒストグラム更新の潜在的な問題を特定するのに十分なはずです。さらに、バックグラウンドヒストグラム更新中に発生する全てのエラーイベントをエラーから警告に格下げしました。(バグ #114845、バグ #36574298)
  • MySQL 9の新しいエラーのエラー番号の範囲は、6400から始まるように指定されました。(バグ #114414、バグ #36421351)
  • UDFへの引数の文字セットがコンポーネントサービスを使用して指定され、渡された引数値が目的の文字セットにきれいに変換されなかった場合、UDFは実行を停止し、SQL NULLを返しました。(バグ #114409、バグ #36420251)
  • 決定論的ストアド関数がreturnステートメント内でJOIN ONを使用した場合、決定論的ストアド関数が誤った結果を返す可能性がありました。例えば、2回の実行の間のFLUSH TABLESによってテーブルメタデータが生じたためにクエリを再準備する必要がある場合、ON句が失われることがありました。(バグ #114235、バグ #36379879)
  • サーバーは、親テーブルの列を参照するサブクエリを含むクエリを拒否しました。(バグ #113887、バグ #36262779)
  • SUM(SUBSTRING())は予想どおり警告を返しましたが、SUM(DISTINCT SUBSTRING())は警告を返しませんでした。 (バグ #113171、バグ #36035064)
  • EL8およびEL9プラットフォームに不足していたmysql-community-libs-compatパッケージを追加しました。(バグ #112949、バグ #35975348)
  • SHOW PARSE_TREE CREATE SCHEMAにより、デバッグビルドでサーバーが終了しました。

    注意
    SHOW PARSE_TREEステートメントはデバッグビルドでのみ使用できます。

    (バグ #112883、バグ #35964157)

  • プリペアドステートメントの実行時に、THREADSのPROCESSLIST_INFO列が更新されませんでした。(バグ #104121、バグ #33057164)

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


    MySQL Editions

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