2024.05.09

MySQL

MySQL 8.4.0 LTSリリース(リリース日:2024年4月30日)

監査ログ関連

  • 混合タイプの引数を指定してaudit_api_message_emit_udf()を呼び出すと、サーバーが計画外にシャットダウンされる可能性がありました。 (バグ #36301441)
  • タイプとしてエラーを使用した、タイプによる監査ログのフィルタリングが正しく機能しませんでした。 (バグ #36142157)
  • 計画外のシャットダウンと再起動の後、その時点でサーバーが書き込みに使用していたファイルは壊れているか、読み取り不能である可能性があります。ファイルが読み取れないことを示す監査ログプラグインのログメッセージがエラーとして表示されました; 現在では、このメッセージは警告として扱われるようになりました。 (バグ #36118809)

C API関連

  • 重要な変更: MySQL 8.3で削除された次のMySQL C API関数は、MySQL 8.4.0で再実装および復元されました。
    • mysql_kill(): COM_PROCESS_KILL(削除済み)の代わりに、この関数はmysql_real_query()を使用してKILLを実行するように再実装されました。
    • mysql_list_fields(): COM_FIELD_LISTと同様に、以前に実装されていたように復元されました。
    • mysql_list_processes(): COM_PROCESS_INFO(削除済み)の代わりに、mysql_real_query()を使用してSHOW PROCESSLISTを実行するように再実装されました。
    • mysql_refresh(): MySQL 8.3で削除されたCOM_REFRESHの代わりに、mysql_real_query()を使用してFLUSHステートメントを実行するように再実装されました。
    • mysql_reload()
    • mysql_shutdown(): MySQL 8.3で削除されたCOM_SHUTDOWNではなく、mysql_real_query()を使用してシャットダウンコマンドを実行するように再実装されました。
    • mysql_ssl_set()
    • mysql_stmt_bind_param()

    ここに挙げた関数は、MySQL 8.4シリーズの存続期間中サポートされます。 (WL #16221)

  • Microsoft Windows: MySQLプラグインが依存するサードパーティのDLLファイルは、インストール時に、MySQL実行可能ファイルと同じディレクトリに配置されます。Windowsのデフォルトの動作では、現在の実行可能ファイルと同じディレクトリで依存関係を検索します。これは、インストールディレクトリの外でlibmysql.dllを使用するクライアントには適していません。
    この問題は、ローダーが現在のモジュール(実行可能ファイルまたはlibmysql.dll)のディレクトリで依存関係を検索するようにMySQLクライアントのデフォルトの動作を変更することで修正しました。さらに、libsasl.dllは、必要な依存関係を全て独自のディレクトリからロードすることを想定しているため、SASLプラグインは専用のサブディレクトリに配置されるようになりました。 (バグ #36006295)

文字セット関連

  • character_set_serverシステム変数は、SET PERSISTまたはSET GLOBALを使用して設定された時、新しいクライアントセッションの場合、または、サーバーの再起動後にサーバーへの接続を確立するクライアントの場合には有効になりませんでした。唯一の回避策は、サーバーの起動時に対応するコマンドラインオプションを設定することでした。
    これを修正するために、サーバーの再起動時に変数設定が期待どおりに有効になるように設定データが正しい順序で読み取られるようになりました。 (バグ #35529604)

コンパイル関連

  • libeventライブラリは削除されました。 (バグ #36357190)
  • libcnoライブラリを追加しました。 (バグ #36357181)
  • extra/libbacktrace内の一部のファイルには、間違ったライセンス情報、著作権情報、またはその両方が含まれていました。 (バグ #36118772)

設定関連

  • Microsoft Windows: Windowsでは、「戻る」ボタンと「次へ」ボタンが使用された後、MySQL Configuratorが構成設定を誤って変更しました。 (バグ #36156577)
  • Microsoft Windows: Windowsでは、設定されていないMySQLサーバーを削除する時にMySQL Configuratorが開かなくなりました。 (バグ #35709927)
  • Microsoft Windows: Windowsでは、MySQL Configuratorは、生成されたmy.iniファイルへのdefault_authentication_plugin変数の追加を停止しました。この変数は、MySQL Server 8.4 で削除されました。また、インストールをMySQL 8.4にアップグレードする時にも削除されます。置換変数 authentication_policyはMySQL Configuratorによって設定されないことに注意してください。 (WL #16137)
  • Microsoft Windows: Windowsでは、MySQL Configuratorは、MySQL 5.7以前からのアップグレードを許可しなくなりました。以前は、正式にサポートされていないことを示した後でアップグレードを実行できました。 (WL #16138)

非推奨と削除関連

  • 重要な変更: 非推奨のmysql_native_password認証プラグインはデフォルトで無効になりました。これを有効にするためには、新しいサーバーオプション --mysql-native-password=ON を使用してMySQLを起動するか、MySQL設定ファイルの[mysqld]セクションに mysql_native_password=ON を追加します。
    詳細については、Native Pluggable Authenticationを参照してください。 (バグ #36337893)
  • レプリケーション: MySQLの以前のバージョンで非推奨となっていた、MySQLレプリケーションに関連する多くの機能の構文が削除されました。これらの機能には、SQLステートメント構文の側面と、MySQLサーバーのいくつかのシステムステータス変数が含まれます。これらの変更については、以下で詳しく説明します。
    SQLステートメントが削除されました。次のSQLステートメントが削除されました (括弧内に置き換え): START SLAVE (START REPLICA); STOP SLAVE (STOP REPLICA); SHOW SLAVE STATUS (SHOW REPLICA STATUS); SHOW SLAVE HOSTS (SHOW REPLICAS); RESET SLAVE (RESET REPLICA); CHANGE MASTER TO (CHANGE REPLICATION SOURCE TO); RESET MASTER (RESET BINARY LOGS AND GTIDS); SHOW MASTER STATUS (SHOW BINARY LOG STATUS); PURGE MASTER LOGS (PURGE BINARY LOGS); SHOW MASTER LOGS (SHOW BINARY LOGS)。
    先ほどリストしたステートメントは、全てのMySQLテストプログラムとファイル、および、内部で使用されるその他の場所からも削除されています。
    ステートメントのオプションが削除されました。CHANGE REPLICATION SOURCE TO および START REPLICA で以前サポートされていた次のオプションは削除され、サーバーで受け入れられなくなりました。ここでは、これらのステートメントごとにそれらをリストし、括弧内に置き換えたものを示します:

    • CHANGE REPLICATION SOURCE TO オプションが削除されました:
      MASTER_AUTO_POSITION (SOURCE_AUTO_POSITION), MASTER_HOST (SOURCE_HOST), MASTER_BIND (SOURCE_BIND), MASTER_USER (SOURCE_USER), MASTER_PASSWORD (SOURCE_PASSWORD), MASTER_PORT (SOURCE_PORT), MASTER_CONNECT_RETRY (SOURCE_CONNECT_RETRY), MASTER_RETRY_COUNT (SOURCE_RETRY_COUNT), MASTER_DELAY (SOURCE_DELAY), MASTER_SSL (SOURCE_SSL), MASTER_SSL_CA (SOURCE_SSL_CA), MASTER_SSL_CAPATH (SOURCE_SSL_CAPATH), MASTER_SSL_CIPHER (SOURCE_SSL_CIPHER), MASTER_SSL_CRL (SOURCE_SSL_CRL), MASTER_SSL_CRLPATH (SOURCE_SSL_CRLPATH), MASTER_SSL_KEY (SOURCE_SSL_KEY), MASTER_SSL_VERIFY_SERVER_CERT (SOURCE_SSL_VERIFY_SERVER_CERT), MASTER_TLS_VERSION (SOURCE_TLS_VERSION), MASTER_TLS_CIPHERSUITES (SOURCE_TLS_CIPHERSUITES), MASTER_SSL_CERT (SOURCE_SSL_CERT), MASTER_PUBLIC_KEY_PATH (SOURCE_PUBLIC_KEY_PATH), GET_MASTER_PUBLIC_KEY (GET_SOURCE_PUBLIC_KEY), MASTER_HEARTBEAT_PERIOD (SOURCE_HEARTBEAT_PERIOD), MASTER_COMPRESSION_ALGORITHMS (SOURCE_COMPRESSION_ALGORITHMS), MASTER_ZSTD_COMPRESSION_LEVEL (SOURCE_ZSTD_COMPRESSION_LEVEL), MASTER_LOG_FILE (SOURCE_LOG_FILE), MASTER_LOG_POS (SOURCE_LOG_POS)。
    • START REPLICA オプションが削除されました: MASTER_LOG_FILE (SOURCE_LOG_FILE) および MASTER_LOG_POS (SOURCE_LOG_POS)。


    ステータス変数が削除されました。
    また、この作業の一環として、次のシステムステータス変数がサーバーから削除され、SHOW STATUSなどのステートメントの出力には表示されなくなりました。これらの変数はここにリストされており、その置き換えは括弧内に示されています: Com_slave_start (Com_replica_start); Com_slave_stop (Com_replica_stop); Com_show_slave_status (Com_show_replica_status); Com_show_slave_hosts (Com_show_replicas); Com_show_master_status (Com_show_binary_log_status); Com_change_master (Com_change_replication_source)。
    (WL #15831、WL #16063、WL #16069、WL #16086、WL #16087、WL #16088、WL #16089、WL #16090)

  • グループレプリケーション: group_replication_allow_local_ lower_version_joinシステム変数は非推奨になり、これを設定すると警告(ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT)が発生します。
    この変数はMySQLの将来のバージョンでは削除される予定です。互換性のないメンバーがグループに参加することを許可する理由がなくなったため、この機能の置き換えは計画されていません。 (WL #16018)
  • 以前のバージョンのMySQLでサポートされていた多くのサーバーオプションと変数が、このリリースで削除されました。MySQL 8.4でこれらのいずれかを設定しようとすると、エラーが発生します。これらのオプションと変数は次のとおりです:
    • binlog_transaction_dependency_tracking: MySQL 8.0.35およびMySQL 8.2.0で非推奨になりました。
      この変数やその機能はサーバーの内部に組み込まれているため、置き換える計画はありません: 現在、マルチスレッドレプリカが使用されている場合、ソース mysqldはバイナリログの依存関係情報を生成するために常にwritesetsを使用します; これは、以前のバージョンのMySQLでbinlog_transaction_dependency_trackingをWRITESETに設定するのと同じ効果があります。
    • group_replication_recovery_complete_at: MySQL 8.0.34で非推奨になりました。
      このリリース以降、分散リカバリプロセス中に適用されるポリシーは、常に、新しいメンバーがグループに参加する前に行われた全てのトランザクションを受信、認証、および適用した後にのみ、そのメンバーをオンラインとしてマークすることです; これは、以前のバージョンのMySQLでgroup_replication_recovery_complete_atをTRANSACTIONS_APPLIEDに設定するのと同じです。
    • avoid_temporal_upgradeとshow_old_temporals: どちらもMySQL 5.6で非推奨になりました。これらの各変数は何の効果も持たなくなったため、削除されました。どちらの変数も置き換える予定はありません。
    • --no-dd-upgrade: MySQL 8.0.16で非推奨となり、現在は削除されています。代わりに--upgrade=NONEを使用してください。
    • --oldおよび--new: どちらもMySQL 8.0.35とMySQL 8.2.0で非推奨となり、現在は削除されています。
    • --language: このオプションはMySQL 5.5で非推奨となり、現在は削除されています。
    • --sslおよび--admin-sslサーバーオプションと、have_sslおよびhave_opensslサーバーシステム変数は、全てMySQL8.0.26で非推奨となり、このリリースで全て削除されました。代わりに--tls-versionと--admin-tls-versionを使用してください。
    • default_authentication_plugin: MySQL 8.0.27で非推奨となり、現在は削除されています。代わりにauthentication_policyを使用してください。
      また、authentication_policy変数を設定するための構文が変更されていることにも注意してください; 詳細については、マニュアルの説明を参照してください。

    (バグ #36337893, WL #9677、WL #13965、WL #15461、WL #15839、WL #16056、WL #16058、WL #16059、WL #16095)

  • 別名テーブルがEXPLAIN出力で参照される場合、そのテーブル名はスキーマ名で修飾されていましたが、これは必須ではなく、結果的に混乱を引き起こす可能性がありました。これらのスキーマ修飾は出力から削除されました。 (バグ #36053664)
  • MySQL 8.0.22で非推奨となった未使用のINFORMATION_SCHEMA.TABLESPACESテーブルは削除されました。
    InnoDB テーブルの場合、情報スキーマ INNODB_TABLESPACESテーブルとINNODB_DATAFILESテーブルはテーブルスペースメタデータを提供します。 (WL #14065)
  • LOCK TABLES ... WRITEで使用されるLOW_PRIORITYは、MySQL 5.5以降は効果がなく、MySQL 5.6で非推奨になりました。このリリースで削除されました; LOCK TABLESにLOW_PRIORITYを含めると、構文エラーが発生するようになりました。 (WL #16057)
  • FLOATおよびDOUBLEカラムでのAUTO_INCREMENT修飾子の使用のサポートは、MySQL 8.0で非推奨となり、現在は削除されています。CREATE TABLEステートメントとALTER TABLEステートメントでこれらを一緒に使用しようとすると、Incorrect column specifier for columnエラー (ER_WRONG_FIELD_SPEC)が発生するようになりました。
    重要このリリースにアップグレードする前に、FLOAT ... AUTO_INCREMENTまたはDOUBLE ... AUTO_INCREMENT列を持つテーブルを変更して、これらのどちらも使用しないようにする必要があります。そうしないと、テーブルをアップグレードできません。
    (WL #13103)
  • MySQL 8.0.34で非推奨となった mysql_ssl_rsa_setupユーティリティは、このリリースでは削除されました。OpenSSLを使用してコンパイルされたMySQLディストリビューションの場合、MySQLサーバーは起動時に不足しているSSLファイルとRSAファイルの自動生成を実行できます。詳細については、Creating SSL and RSA Certificates and Keys using MySQLを参照してください。 (WL #16205)
  • このリリースでは、次のSQLステートメントからENGINE句のサポートが削除されます:
    • DROP TABLESPACE (全てのバリアント)
    • ALTER TABLESPACE ... DROP DATAFILE
    • ここにリストされている2つの例外を除く、ALTER TABLESPACEの他の全てのバリアント:
      • ALTER TABLESPACE ... ADD DATAFILE ENGINE={NDB|NDBCLUSTER}
      • ALTER UNDO TABLESPACE ... SET {ACTIVE|INACTIVE} ENGINE=INNODB

    前に挙げた例外的なケースを除いて、ALTER TABLESPACEまたはDROP TABLESPACEでENGINE句を使用すると、ステートメントがエラーで拒否されます。
    ALTER TABLESPACEおよびDROP TABLESPACEステートメントのENGINE句は、MySQL 8.0で非推奨になりました。 (WL #16055)

  • MySQL 8.2.0で非推奨となった SET_USER_ID権限は、このリリースで削除されており、GRANTステートメントでこの権限を使用すると構文エラーが発生するようになりました。代わりに、SET_ANY_DEFINER権限とALLOW_NONEXISTENT_DEFINER権限を使用してください。 (WL #15875)
  • MySQL 8.0.16以降は機能を提供していなかった、非推奨のmysql_upgradeユーティリティを削除しました。 (WL #16096)
  • 非推奨のmysqlpumpユーティリティと、それに関連するlz4_decompressおよびzlib_decompressヘルパーユーティリティを削除しました。代わりに、mysqldumpまたはMySQL Shellのダンプユーティリティを使用してください。 (WL #16096)
  • 以下のプラグインが削除されました。これらは、サーバーシステム変数、CMakeオプション、および、これらに関連する削除されたその他の機能とともに、ここで提供されるリストに記載されています:
    • authentication_fido、authentication_fido_client: 代わりに、authentication_webauthnを使用してください。
      authentication_fido_rp_idサーバーシステム変数、mysqlクライアント --fido-register-factorオプション、および、-DWITH_FIDO CMakeオプションも削除されました。
    • keyring_file: 代わりに、component_keyring_fileを使用してください。
      keyring_file_dataシステム変数も削除されました。さらに、CMakeオプション -DINSTALL_MYSQLKEYRINGDIRおよび-DWITH_KEYRING_TESTが削除されました。
    • keyring_encrypted_file: 代わりに、component_keyring_encrypted_fileを使用してください。
      keyring_encrypted_file_dataおよびkeyring_encrypted_file_passwordサーバーシステム変数も削除されました。
    • keyring_oci: 代わりに、component_keyring_ociを使用してください。
      次のサーバーシステム変数も削除されました: keyring_oci_ca_certificate、keyring_oci_compartment、keyring_oci_encryption_endpoint、keyring_oci_key_file、keyring_oci_key_fingerprint、keyring_oci_management_endpoint、keyring_oci_master_key、keyring_oci_secrets_endpoint、keyring_oci_tenancy、keyring_oci_user、keyring_oci_vaults_endpoint、keyring_oci_virtual_vault。
    • openssl_udf: 代わりに、MySQL Enterprise Encryptionコンポーネントを使用してください。

    (WL #15937、WL #15938、WL #15939、WL #15941、WL #16140)

  • 弱い暗号化暗号のサポートは削除されました。これは、暗号化された接続を設定する時に、MySQLでは次の条件を満たさない暗号を指定できなくなったことを意味します:
    • 適切なTLSバージョン (必要に応じてTLS v1.2またはTLSv1.3)
    • 前方秘匿性
    • 暗号、証明書、またはその両方でのSHA2
    • GCMまたはその他のAEADアルゴリズムまたはモードのAES

    これは、システム変数 ssl_cipher、admin_ssl_cipher、tls_ciphersuites、admin_tls_ciphersuitesの設定に影響します。
    libmysqlclientはこの変更の影響を受けず、条件を満たさない暗号を引き続きサポートするため、以前のバージョンのMySQLに引き続き接続できることに注意してください。 (WL #15801)

ファイアウォール関連

  • アップグレード後、一部のMySQL Firewallストアドプロシージャが期待どおりに更新されませんでした。 (バグ #36084930)
  • MySQL Enterprise Firewallによって提供されるストアドプロシージャにいくつかの機能強化が加えられました。これらの改善点は次のとおりです:
    • MySQL Enterprise Firewallによって提供されるストアドプロシージャがトランザクション対応になりました。ファイアウォールストアドプロシージャの実行中にエラーが発生すると、エラーが報告され、その時点までにストアドプロシージャによって行われた全ての変更がロールバックされます。
    • ファイアウォールストアドプロシージャは、DELETEとINSERTステートメントの不要な組み合わせや、INSERT IGNOREとUPDATE操作の不要な組み合わせの実行を回避し、それらをより高速かつ効率的に実行できるようになりました。
    • 以前に非推奨となったユーザーベースのストアドプロシージャとUDFは、sp_set_firewall_mode()またはsp_reload_firewall_rules()のいずれかを呼び出すと非推奨の警告を生成するように、非推奨の警告を発生するようになりました。

    (WL #15790)

INFORMATION_SCHEMA関連

  • PROCESSLISTテーブルの潜在的な競合状態を修正しました。 (バグ #35509371)

キーリング関連

  • キーリングコンポーネントからキーリングプラグインへの移行がサポートされるようになりました。このような移行を実行するためには、このリリースで導入された--keyring-migration-from-componentサーバーオプションを使用し、--keyring-migration-sourceをソースコンポーネントの名前に設定し、--keyring-migration-destinationをターゲットプラグインの名前に設定します。(WL #16017)

オプティマイザー関連

  • このリリースでは、ヒストグラムの自動更新のサポートが追加されています。特定のヒストグラムに対してこの機能が有効になっている場合、親テーブルでANALYZE TABLEが実行される度にヒストグラムが更新されます。自動更新が有効になっている場合、InnoDBによる永続統計の自動再計算もヒストグラムを更新します。
    自動ヒストグラム更新では、ヒストグラムが最初に指定されていたのと同じ数のバケットが使用されます (いくつか指定されていた場合)。
    ヒストグラムの自動更新を有効にするためには、ANALYZE TABLEステートメントにAUTO UPDATEオプション (このリリースで追加) を含めます。これを無効にするためには、代わりにMANUAL UPDATEを含めます。どちらのオプションも指定しない場合は、MANUAL UPDATE (自動更新なし) がデフォルトになります。このリリースにアップグレードすると、既存のヒストグラムはMANUAL UPDATEを使用して作成されたものとして扱われます。
    (バグ #36053241、WL #15786)
  • マルチレンジ読み取り (MRR) の最適化は、以前のリリースほどパフォーマンスが良くありませんでした。 (バグ #113711、バグ #36220640)

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

  • 10進数値が割り当てられたユーザー変数は、user_variables_by_threadテーブルで切り上げられました。 (バグ #35781732)

サーバー管理

  • 重要な変更: このリリースでは、FLUSH PRIVILEGESステートメントの使用に固有の権限が追加されます。既存のRELOAD権限とは異なり、新しいFLUSH_PRIVILEGES権限は、FLUSH PRIVILEGESステートメントにのみ適用されます。この権限はグローバルな範囲にあり、ユーザーとロールに適用されます。
    RELOAD権限は、下位互換性を提供するために、この機能で引き続きサポートされます; この権限を持つユーザーは、アップグレード後もFLUSH PRIVILEGESステートメントを実行できます。MySQL 8.4リリースへのアップグレードの一環として、FLUSH_PRIVILEGES権限を持つユーザーがいるかどうかのチェックが実行されます; 存在しない場合は、RELOAD権限を持つユーザーに新しい権限も自動的に割り当てられます。 (WL #16044)
  • 重要な変更: このリリースでは、新しいOPTIMIZE_LOCAL_TABLE権限が追加されます。ユーザーがOPTIMIZE LOCAL TABLEステートメントおよびOPTIMIZE NO_WRITE_TO_BINLOG TABLEステートメントを実行するためには、この権限が必要です。
    以前のリリースからアップグレードする場合、既にSYSTEM_USER権限を持っているユーザーには、自動的にOPTIMIZE_LOCAL_TABLE権限が付与されます。 (WL #15819)

スレッドプール関連

  • パフォーマンススキーマのtp_connectionsスレッドプールプラグインテーブルには、管理グループ内にある接続のエントリーが含まれていませんでした。 (バグ #36296830)

追加または変更された機能

  • 重要な変更; グループレプリケーション: MySQL 8.0は、バージョンが8.0.17以前のグループメンバーに対して特別な処理を実行します。この特別な処理は現在のリリースでは削除されています。
    MySQL 8.0のユーザーは、MySQL 8.4にアップグレードする前に、全てのインスタンスを最新の8.0リリースにアップグレードすることをお勧めします。 (バグ #36314222)
  • 重要な変更; グループレプリケーション: グループレプリケーションに関連する2つのサーバーシステム変数のデフォルト値が変更されました。
    • group_replication_consistencyシステム変数のデフォルト値は、BEFORE_ON_PRIMARY_FAILOVERになりました; 以前は、これはEVENTUALでした。
    • group_replication_exit_state_actionシステム変数のデフォルト値は、OFFLINE_MODEになりました; 以前は、これはREAD_ONLYでした。

    (WL #15712、WL #15713)

  • 重要な変更; グループレプリケーション: group_replication_consistencyをBEFORE_ON_PRIMARY_FAILOVERに設定して発行すると、MySQL KILLステートメントは整合性保証を無視し、中断されたトランザクションはロールバックされるようになりました。
  • 重要な変更: OpenSSLライブラリがバンドルされているプラットフォームの場合、MySQL Server用のリンクされたOpenSSLライブラリがバージョン 3.0.13に更新されました。OpenSSL バージョン 3.0.13で修正された問題については、https://www.openssl.org/news/cl30.txtで説明されています。 (バグ #36261675)
  • 重要な変更: MySQL 5.7からMySQL 8.4へのアップグレードはサポートされていません; これを反映するためにコードと動作が更新されました。MySQL 8.4に進む前に、MySQL 5.7を8.0にアップグレードしてください。 (WL #15924)
  • InnoDB: 長時間実行しているロールバック中に、進行状況メッセージが情報メモレベルのエラーメッセージとして定期的に記録されるようになりました。最初はER_IB_LONG_ROLLBACK_FULL (トランザクション情報を追加する)として、その後にER_IB_LONG_ROLLBACKが続きます。 (WL #15822)
  • InnoDB: 次のInnoDB設定オプションのデフォルト値を変更しました: innodb_adaptive_hash_index、innodb_buffer_pool_in_core_file、innodb_buffer_pool_instances、innodb_change_buffering、innodb_doublewrite_files、innodb_doublewrite_pages、innodb_flush_method、innodb_io_capacity、innodb_io_capacity_max、innodb_log_buffer_size、innodb_numa_interleave、innodb_page_cleaners、innodb_parallel_read_threads、innodb_purge_threads、innodb_read_io_threads、innodb_use_fdatasync、temptable_max_ram、temptable_max_mmap、temptable_use_mmap。innodb_dedicated_serverの影響を受ける設定も変更されました。
    (WL #16179)
  • パッケージ: Fedora 40およびUbuntu 24.04のサポートを追加しました。
  • グループレプリケーション: グループに再参加するメンバーが、グループへの以前の参加からgroup_replication_applierチャネルに適用するトランザクションを持っている場合、それらのトランザクションは、分散リカバリ中にドナーに接続する前にメンバーが再参加する時に適用されます。
    適用するトランザクションのこのバックログは、performance_schema.replication_applier_status_by_workerテーブルを使用して監視できますが、エラーログにはそれに関する情報がなかったため、サーバーが停止したという誤った印象を与える可能性がありました。
    現在は、このような場合、メッセージの1つ Distributed recovery will wait until the transactions ... contained on the group_replication_applier channel are applied or Distributed recovery finished applying the transactions ... contained on the group_replication_applier channel も、必要に応じてエラーログに書き込まれます。 (バグ #36229998)
  • クローンプラグインのバージョン要件が緩和され、同じシリーズの異なるポイントリリース間でクローンを作成できるようになりました。つまり、以前はポイントリリース番号も一致する必要がありましたが、メジャーバージョン番号とマイナーバージョン番号のみが一致する必要があります。
    例えば、クローン機能により、8.4.0から8.4.14へ、および、8.0.51から8.0.37へのクローン作成が可能になりました。8.0の場合、8.0.37より古いバージョンには以前の制限が引き続き適用されるため、8.0.36から8.0.42のようなクローン作成、または、その逆のクローン作成は許可されません。 (バグ #36293529、WL #15989)
  • EXPLAIN FORMAT=JSONの反復子ベースの形式を使用する場合 (つまり、explain_json_format_versionが2の場合)、出力にはステートメントのタイプ(select、insert、deleteなど)を識別するquery_typeフィールドが含まれるようになりました。 (バグ #36134568)

主なバグ修正

  • 重要な変更; レプリケーション: 現在は、gtid_executedサーバーシステム変数を設定するために、TRANSACTION_GTID_TAG権限が必要です。 (バグ #36201133)
  • 重要な変更: Robin Hoodハッシュライブラリは、unordered_denseに置き換えられました。 (バグ #36158022)
  • InnoDB; Microsoft Windows: REDOログファイルをオーバーラップモードで開くことにより、WindowsでのREDOログのパフォーマンスが向上しました。 (バグ #36154818)
    参考: この問題は、バグ #12527のリグレッションです。
  • InnoDB: ログライターは、log.writer_mutexを一時的に解放する関数を呼び出します。これにより、innodb_log_writer_threads=OFFの場合、間に他のスレッドがREDOログに書き込む可能性があります。 (バグ #36425219)
  • InnoDB: FTSインデックスを持つテーブルに対する一部のFTS操作により、一貫性のない結果が発生する可能性がありました。例えば、FTSキャッシュの同期中にサーバーが終了した場合や、別のFTS操作と同時に同期が発生した場合などです。
    (バグ #36343647)
  • InnoDB: データを含むテーブルにインデックスを作成する時に、valgrindがddl::Builder::bulk_add_rowからの初期化されていないメモリの読み取りを報告することがありました。 (バグ #36342792)
  • InnoDB: Windowsでは、共有書き込みロックなしでファイルを開いたままfil_shardミューテックスを取得しようとすると、fil_shardミューテックスを取得して同じファイルにアクセスしようとした別のスレッドとの間でデッドロックが発生しました。 (バグ #36159317)
    参考: バグ #32808809も参照してください。
  • InnoDB: リカバリ中に"Found existing redo log files, but at least one is missing"エラーが発生する可能性がある潜在的なREDOログローテーションの問題を修正しました。 (バグ #36124625)
  • InnoDB: フルテキストインデックスに関連するアサーションエラーが見つかり、修正されました。 (バグ #35836581)
  • InnoDB: 破損したREDOログをより適切に処理できるように、ログバッファチェックをfil_tablespace_redo_*関数に追加しました。 (バグ #35676721)
  • InnoDB: アサーションの失敗を引き起こす可能性がある状況である、テーブルスペースの削除プロセス中のバッファ処理が改善されました。 (バグ #35676106、バグ #36343647)
  • InnoDB: REDOログがインスタントDDLを使用した列順序の変更をログに記録しない可能性があり、これによりリカバリ中に不正なログ再生が発生する可能性がありました。 (バグ #35183686)
  • InnoDB: innodb_parallel_read_threadsが1より大きい値に設定されていると、InnoDBは先読みヒューリスティックを不必要に無効にし、ページがまだバッファプールにない時にストールを引き起こしました。 (バグ #113482、バグ #36142806)
  • InnoDB: テーブルスペースのインポートには、インポートされる列名に128文字というハードな制限があり、可変長エンコーディングが適切に考慮されていませんでした。現在は、64 * マルチバイト文字の最大長に設定されています。
    (バグ #113208、バグ #36047803)
  • InnoDB: TempTableストレージエンジンで一意のハッシュインデックスを使用するクエリを実行すると、MEMORYエンジンでクエリを実行する場合に比べて、大幅に時間がかかる可能性がありました。
    (バグ #113178、バグ #36037224、バグ #36224958)
  • InnoDB: 容量がいっぱいで、別のスレッドがCREATE USERなどのUSER関連の操作を実行している場合、REDOログコンシューマは先に進むことができませんでした。これにより、新しい接続もブロックされ、innodb_redo_log_capacityサイズを増やすという回避策が妨げられる可能性がありました。 (バグ #112608、バグ #36004840)
  • InnoDB: デバッグビルドでは、MDLロックを取得しようとしたトランザクションがアクティブでなくなった時に、InnoDBのバックグラウンドでアサーションエラーが発生しました。
    (バグ #112424、バグ #35835864)
    参考: この問題は、バグ #33700835のリグレッションです。
  • InnoDB: MySQLの切り捨てundo操作 (スレッドのパージ) は、undoテーブルスペースを切り捨てようとした時に、undo_{space_number}_trunc.logファイルを削除しませんでした。 (バグ #112262、バグ #35784192)
  • InnoDB: innodb_parallel_read_threadsが1より大きい値に設定されていると、InnoDBは不必要に非同期読み取りを要求します。これにより、I/O完了中にさらに多くの同期が必要となり、I/O操作の処理に使用できるスレッド(innodb_read_io_threads)の数が限られているためにボトルネックが発生しました。現在は、非同期読み取りではなく同期読み取りが実行されるようになりました。 (バグ #112137、バグ #35740866)
  • InnoDB: trxは、不正なtrx->in_innodb値に遭遇すると予期せず停止します。
    (バグ #110652、バグ #35277407)
  • InnoDB: 数千の読み取り専用トランザクションが存在する場合のdata_lockテーブルとdata_lock_waitsテーブルへのクエリに関連するパフォーマンスの問題を修正しました。 (バグ #109539、バグ #34951273)
  • InnoDB: MySQLは、セカンダリインデックススキャンを使用するオプティマイザヒントを無視しなくなり、代わりにクラスター化 (並列) インデックススキャンが強制的に実行されます。さらに、クラスター化インデックスの使用を強制するインデックスヒントを提供する機能が追加されました。 (バグ #100597、バグ #112767、バグ #31791868、バグ #35952353)
    参考: この問題は、バグ #12978のリグレッションです。
  • レプリケーション: SHOW SLAVE STATUSなどの古いレプリケーション用語が含まれるデータから復元する場合、diagnostics.sqlによりMySQLの以前のバージョンからMySQL 8.4.0へのアップグレードが妨げられました。 (バグ #36323066)
  • レプリケーション: Gtid_tagged_log_eventは、元のコミットタイムスタンプが即時コミットタイムスタンプと異なる場合のみではなく、等しい場合にのみ正しい値をエンコードしました。 (バグ #36312880)
  • レプリケーション: 場合によっては、gtid_nextサーバーシステム変数が無効な値を受け入れたり、それを設定した後に(正当な値に設定したとしても)無効な値を表示したり、あるいはその両方でした。 (バグ #36308318)
  • レプリケーション: レプリケーションチャネルが不明なネットワーク名前空間で設定されている場合、レプリケーション受信スレッドはエラーを報告しませんでした。このようなエラーが発生すると受信スレッドは停止しましたが、停止の理由は表示またはログに記録されませんでした。 (バグ #36054355)
  • レプリケーション: binlog_format=ROWおよびgtid_mode=OFFの場合、レプリカ上でアプライヤの同時実行性が高いと、自動インクリメントロックを競合するワーカー間でデッドロックが報告されることがありました。 (バグ #35851009)
  • レプリケーション: 場合によっては、SQLスレッドが、パラレルアプライヤを使用して実行すると、エラー MY-001755 (ER_MTA_CANT_PARALLEL)で終了しました。 (バグ #35431274)
  • レプリケーション: 準備されたトランザクションのXA COMMITが失敗すると、トランザクションがロールバックされる可能性がありました。 (バグ #33650776)
  • レプリケーション: バイナリログファイルのサイズが大きいため、レプリケーションソースサーバーが4GBオフセットを超えるバイナリログファイル位置を含むハートビートイベントを送信した場合、レプリケーション受信側スレッドがエラーで停止しました。この状況で使用できるように、より大きな値を正しく処理する新しいハートビートイベント (Heartbeat_log_event_v2、ログイベントタイプ 41) が追加されました。 (バグ #29913991)
  • レプリケーション: サーバーがER_REPLICA_HEARTBEAT_FAILUREエラーメッセージを出力する時に、マスターログファイル名の長さが考慮されなかったため、無関係なデータが出力されました。 (バグ #29913928)
  • グループレプリケーション: メンバー M1は回復ユーザーとしてu1を使用し、M2は自身の回復ユーザーとしてu2を使用し、かつ、ユーザー u1とu2は両方とも全ての必要な権限を持ってM1とM2に存在し、かつ、新しいメンバー M3が回復ユーザーとしてu2を使用してグループに参加した時に、メンバー M1とM2がグループに所属している場合に問題が発生しました。M3はユーザー u2のみを認識していましたが、ユーザー u1については認識していなかったので、M1がM2に接続できなかったために、M2でのSTART GROUP REPLICATIONが拒否されました。これにより、グループメンバーをM1およびM2としてリストする新しい view_idも生成されましたが、それでも、M1はM3への接続を試行し続け、M1はmysql接続確立時のエラーをログに記録し、M3はM1からの接続試行に対するアクセス拒否エラーをログに記録しました。
    仕様により、XComは、過去と現在の全ての設定間で共有される物理接続への参照を含む、最後の3つの既知の設定を保存します。これは、明示的または暗黙的に、グループに再参加し、それらの設定のいずれかに既に存在していたノードによる迅速な再接続を容易にするために行われます。
    この副作用として、現在グループに含まれていないノードへの接続が試行され続ける可能性があります。この問題を解決するためには、DBAやオペレーターがシステムに問題があると誤って考える可能性のある誤検出を回避するために、ノードが現在の設定にない場合はエラーロギングを禁止します。 (バグ #36210988)
    参考: バグ #32592027も参照してください。
  • グループレプリケーション: GTIDセットの処理が改善されました。 (バグ #36093405)
  • グループレプリケーション: メンバーがグループを抜けてERROR状態に移行したが、group_replication_exit_state_actionで指定されたアクションを受け入れなかった2つのケースが見つかりました。これらはここにリストされています:
    • super_read_onlyを有効にする時にエラーが発生した場合
    • グループメンバーのバイナリログとクローングループが欠落しているため、メンバーの参加の回復ができなかった場合

    例: group_replication_exit_state_actionの値がOFFLINE_MODEで、これらのイベントのいずれかが発生した場合、オフラインモードは期待どおりに有効になりませんでした。 (バグ #36076308)

  • グループレプリケーション: 新しいプライマリの設定に成功した後、場合によっては、group_replication_set_as_primary()が操作が完了するまで無期限に待機しました。 (バグ #36059098)
  • グループレプリケーション: AFTERのトランザクションに影響するエラー (ER_GRP_RPL_TRX_WAIT_FOR_GROUP_PREPARE_FAILED)の場合、エラーログに書き込まれたメッセージは、UUIDではなくセッションIDを参照していました。 (バグ #35953196)
  • グループレプリケーション: プライマリ 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スレッドがブロックされました。これは、XCom通信スタックでのSSL_connect()の呼び出しに追跡され、MySQL 8.0.27では非同期形式から同期形式に変更されました。ノードが過負荷になると、SSL_connect()呼び出しに応答せず、接続しているエンドを無期限にブロックしたままにする可能性がありました。
    これを修正するために、現在は非ブロッキングな方法で接続するようになり、タイムアウトの場合は戻り、再試行は呼び出し元(この特定のケースでは、別のノードに再接続しようとする時のXComスレッド)に任せられます。 (バグ #34348094)
  • JSON: JOINとGROUP BYは、一部のJSON列値を異なる方法で処理しました。 (バグ #101048、バグ #31969607)
  • MySQL NDB ClusterJ: setLimits()メソッドがdeletePersistentAll()にチェーンされ、削除する項目の数を制限できるようになりました。 (バグ #36049906)
  • MySQLをビルドするために必要なCMakeの最小バージョンを3.5.1から3.14.6に引き上げました。 (バグ #36338366)
    参考: バグ #35553331も参照してください。
  • バックトレースライブラリの設定がビルドプロセスの早過ぎる段階で実行され、ライブラリ自体がコンパイラフラグの不完全なセットを使用してビルドされており、これらの両方の点でサーバーの他の部分とは異なります。 (バグ #36292247)
  • SET GLOBAL offline_mode=ONは、高負荷時に発行されると、常に正しく動作するとは限りませんでした。 (バグ #36275182)
    参考: バグ #36405894も参照してください。
  • curlをバージョン 8.6.0にアップグレードしました。 (バグ #36267545)
  • スレッドプールコードではなくnet_read_raw_loop()でタイムアウトが検出された場合の新しいエラーメッセージを追加しました。これには、タイムアウトをトリガーする条件に関する情報が含まれます。wait_timeoutで示されるよりも早くタイムアウトが発生した場合、これはエラーレベルのメッセージです。 (バグ #36250895)
    参考: バグ #34857147も参照してください。
  • mysqldumpは、サーバーのバージョンを常に正しく解釈するとは限りませんでした。 (バグ #36248967)
    参考: バグ #36405879も参照してください。
  • ビューのクエリ時に使用された文字セットとは異なる文字セットでビューが作成された場合、ビューへの条件プッシュダウンは照合順序の不一致により拒否されました。 (バグ #36246859)
  • 不要な4つのshift-reduce競合を削除することで、sql/sql_yacc.yyのSQL文法を改善しました。 (バグ #36221823)
  • 非推奨のexec_program()コマンドの使用は、CMake 3.28.1以降との互換性を提供するために、execute_process()に置き換えられました。 (バグ #36220656)
  • MLEコンポーネントが最小RPMビルドに追加されました。 (バグ #36210740)
  • NULLIF()およびEXCEPTを使用する一部のクエリは、set_typelib()でアサーションを生成しました。 (バグ #36151537)
    参考: バグ #33045412も参照してください。
  • 特定のクエリは、EstimateDeleteRowsCost()でアサーションを生成しました。 (バグ #36130806)
    参考: この問題は、バグ #35590128のリグレッションです。
  • SELECT 1 FROM t WHERE CAST(a AS UNSIGNED INTEGER) = 1 AND a = (SELECT 1 FROM t)という形式のクエリにより、item_func.ccでアサーションが生成されました。 (バグ #36128964)
  • SELECT '' AS a UNION SELECT '' AS bのようにUNIONで結合された2つの空の文字列の選択の場合、結果のデータの型はVARCHAR(0)ではなくCHAR(0)でした。
    長さ 0の文字列に対して作成された例外を削除することで、この問題を修正しました。(バグ #36112585)
  • protobufライブラリをバージョン 25.1にアップグレードしました。 (バグ #36108397)
  • Enterprise Linux RPMを構築する場合、ビルドスクリプトは新しいストリップコマンド (/opt/rh/gcc-toolset-12の下) を指すようになり、対応するdwzツールが利用可能であることを確認するようになりました。以前は、これはEL8に対してのみ実装されていました。 (バグ #36090069)
  • リンク時の最適化を使用してOracle Linux上に構築する場合は、gcc-arとgcc-ranlibを検索するようになりました。 (バグ #36089900)
  • 致命的なシグナルをキャッチするためには、sh_handlerではなくsa_sigactionを使用します。これにより、SIGSEGVまたはSIGFPEシグナルを処理する時にシグナルハンドラーがより多くの情報を出力できるようになります。 (バグ #36082110)
  • MySQLクライアントは、MySQL 5.0.15などのプラガブル認証をサポートしていない古いMySQL Serverバージョンに対しては、mysql_native_passwordを使用して認証できませんでした。 (バグ #36066161)
  • サーバーのダウングレード中にログに書き込まれるメッセージが改善されました。 (バグ #36053108)
  • キーリングコンポーネントのエラーログは、コンポーネントが初期化できない場合に、以前よりも多くの情報を提供するようになりました。 (バグ #36037172)
  • Clangを使用してWindows上でデバッグビルドをコンパイルする場合は、_ITERATOR_DEBUG_LEVELを0に設定します。 (バグ #36032501)
  • ENUMまたはSET列でロールアップを実行する時に、これらのタイプのどちらのタイプ情報も見つからない場合、解決中にsql/item_sum.ccでアサーションが発生しました。 (バグ #36028294)
    参考: バグ #33045412も参照してください。
  • 共通テーブル式 (CTE)にINTERSECTまたはEXCEPTセット演算が含まれている場合、後続の結合で同じCTEを2回目に使用すると、間違った結果が返されました。 (バグ #36002215)
  • クエリが最適化中にハッシュ結合を含む非相関サブクエリを評価している時に、クエリを強制終了すると、sql/sql_select.ccでアサートが発生しました。 (バグ #35991384)
  • サーバーは、特定のクエリへの応答で予期せず終了することがありました。 (バグ #35957627)
  • ORDER BYの一部でもある、SELECTリスト内のCOUNT()などのウィンドウ関数を含むロールアップクエリにより、サーバーが予期せずシャットダウンされました。 (バグ #35947358)
    参考: この問題は、バグ #33069747のリグレッションです。
  • ビューおよびテーブルDDLによるビューおよびトリガー定義者の処理が改善されました。 (バグ #35942937)
  • サーバーは、特定のクエリに対して常にメタデータをクライアントに正しく返すとは限りませんでした。 (バグ #35904044)
  • handler.ccのhandler::ha_index_end()でアサーションエラーが見つかり、修正されました。 (バグ #35877600)
  • SELECT DISTINCT t1.x、t2.x FROM t AS t1、t AS t2 WHERE t1.pk = t2.xのようなクエリで、t1.pk = t2.xかつpkがプライマリキーの場合、関数従属性 t2.x->t1.xがあります。これは、一部の候補計画が{t2.x、t1.x}にグループ化され、その他の候補計画が{t1.x}にグループ化されたことを意味します。これらは両方とも有効でしたが、関数従属性が考慮されていなかったため、2つのフィールドセットに対して異なる行推定値が得られました。
    現在は、個別の行の数の計算を1回実行し、その数を全ての計画候補に使用するようになりました。 (バグ #35855573)
  • 複数値インデックスを持つテーブルに対してクエリを実行すると、サーバーが予期せず終了することがありました。多くの場合、このインデックスを使用した複雑なSELECTクエリの実行中に発生しました。 (バグ #35789759)
  • sql/item_subselect.ccのコードが改善されました。 (バグ #35733778、バグ #35738531、バグ #35779012)
  • ウィンドウ関数の一部の集計が正しく処理されませんでした。 (バグ #35560806)
  • CREATE USER IF EXISTSが常に正しくログに記録されるとは限りませんでした。 (バグ #35530823)
  • サーバーはパーティション式でのサブクエリを適切に禁止しませんでした。これらは無効であり、構文エラーを発生させなければいけません。 (バグ #35476172)
  • 使用されている最小Boostバージョンを1.84.0にアップグレードしました。 (バグ #35259498)
  • 一部のRANK() ... OVER()クエリは、sql/sql_executor.ccでアサーションを生成しました。 (バグ #35228083)
  • 複数の連続したALTER TABLE ... ALGORITHM=COPYステートメントが互いに10秒以内に発行されると、n_rows値が0になりました。 (バグ #35127747)
  • フルテキストインデックスを使用し、innodb_optimize_fulltext_onlyを有効にして、同じテーブルに対して2つのOPTIMIZE TABLEステートメントを同時に実行すると、サーバーが終了することがありました。 (バグ #34929814)
  • Valgrindでのauthentication_kerberosの実行中に観察されたメモリリークを削除しました。 (バグ #34482788)
  • MAX(column)を使用したクエリでは、インデックスが列に追加される前と後では異なる結果が得られました。 (バグ #34057432)
  • SETまたはENUMタイプの列に対してLEAD()またはLAG()ウィンドウ関数を使用する一部のクエリは、解決中にアサーションにヒットしました。SETまたはENUM列に対してLEAST()またはGREATEST()関数を使用した一部のクエリで、同じアサーションがヒットされました。 (バグ #33045412)
  • HAVING条件を一時テーブルに追加する場合、HAVING条件内の全てのフィールドが既に一時テーブルのフィールドに置き換えられていることが期待されますが、HAVING句の内部Item_rowタイプに関係する式を含むクエリの場合は、定数式はキャッシュされなかったため、HAVING句は基になるテーブルのフィールドへの参照を保持したままでした。 (バグ #30112096)
  • ハッシュ結合またはストリーミング集計を実行する前に一時テーブル内の行を実体化するクエリでは、データが一時テーブルから結合バッファまたは集計バッファに2回コピーされることがありました。これによって誤った結果が生じることはありませんでしたが、これはバッファスペースの非効率な使用につながり、パフォーマンスに悪影響を及ぼす可能性がありました。
    これは、内部のWalkTablesUnderAccessPath()関数がMATERIALIZEアクセスパス内のテーブルに2回アクセスすることが原因でした。1回目は、MATERIALIZEアクセスパス自体を参照した時、次にMATERIALIZEアクセスパスのtable_pathメンバーにアクセスした時です。
    MATERIALIZEパスを確認する時にはテーブルにアクセスせず、MATERIALIZEの下のtable_pathを確認する場合にのみテーブルにアクセスすることで、この問題を修正します。 (バグ #113647、バグ #36190386)
  • Boost C++ライブラリのダウンロードに使用されるURLを更新しました。 (バグ #113576、バグ #36164514)
  • デバッグサーバーでは、異なるタイプの列を比較する交差により、sql/item.ccでアサートがトリガーされることがありました。 (バグ #113385、バグ #36094867)
  • サブクエリで選択された項目がNULLかどうかテストされた場合、変換は意味的に無効になる可能性がありました; このような場合、グループ化された派生テーブルとの左外部結合ではNULLが生成される場合がありますが、元のサブクエリではNULLが生成されない場合があります。これを防ぐために、このようなサブクエリの変換を禁止するようになりました。 (バグ #113318、バグ #36070542)
  • MySQL 8.0.30で初めて対処された以前の問題の修正は不完全でした。
    (バグ #113174、バグ #36035044)
    参考: この問題は、バグ #110801、バグ #35328028のリグレッションです。
  • s390xでは、過剰最適化を避けるために、-O2を使用してFMAテストをコンパイルするようになりました。
    (バグ #113096、バグ #36016140)
  • s390xはビッグエンディアンプラットフォームですが、コンパイルにはリトルエンディアンICUデータディレクトリが使用されました。
    (バグ #113095、バグ #36016141)
  • ステートメントを準備した後にSET SESSION optimizer_switch = 'hash_set_operations=off'を実行すると、同じ準備されたステートメントを実行しようとした時に、sql/sql_select.ccでアサーションが発生しました。 (バグ #112919、バグ #35970620)
  • サーバーは、エラーの詳細が表示されるかどうかに関係なく、外部キーエラーに対してER_NO_REFERENCED_ROW_2またはER_ROW_IS_REFERENCED_2を使用するようになりました。さらに、ユーザーが適切な権限を持っている場合、エラーメッセージに親テーブルと子テーブルの詳細が表示されるようになりました。 (バグ #112589、バグ #35868410)
  • ルーズインデックススキャンによるグループを使用したクエリから、誤った結果が得られることがありました。 (バグ #112541、バグ #35854362)
  • 参照がOUTER_REFタイプの場合、Item_refオブジェクト内の参照される項目に一貫した外部参照情報があるかどうかをチェックするsql/sql_derived.ccのアサーションが失敗しました。Item_outer_refタイプのオブジェクトの場合は、Item_outer_refオブジェクトとこの参照が指す元の式に対して依存関係情報が設定されましたが、Item_outer_refと元の式の間の中間参照オブジェクトにはこの情報が含まれていませんでした。 (バグ #112478、バグ #35846847)
  • CHAR(0)やBINARY(0)など、長さ0の列を持つデータをテーブルに挿入する時に、デバッグビルドでアサーションが失敗しました。現在では、それほど厳密ではないアサーションは、ソースからコピーされたゼロ以外のバイト数がターゲットと同一であることが検出された場合にのみ、より正確に失敗します。 (バグ #111450、バグ #35507763)
  • MySQLは、libcのmuslバージョンを使用すると正しくビルドされませんでした。
    (バグ #110808、バグ #35330950)
  • TEXT列でデフォルトの文字列ヒストグラムを使用すると、ヒストグラムのバケット値とREVERSE(1)によって返された文字列を比較する時に照合順序の不一致によりアサーションが発生しました。 (バグ #110527、バグ #35227319)
  • 相関ラテラルサブクエリまたは(その他の)依存サブクエリのVALUESステートメントにより、誤った結果が生成されました。 (バグ #109252、バグ #110076、バグ #34852090、バグ #35087820)

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


MySQL Editions

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