2024.01.23

MySQL

MySQL Community Server 8.3.0 Innovationリリース(リリース日:2024年1月16日)

監査ログ関連

  • 場合によっては、audit_log_read( audit_log_read_bookmark() ) を呼び出すとメモリ不足エラーが発生することがありました。(バグ #35957453)

認証関連

  • Microsoft Windows: SASLベースのLDAP認証を実行するサーバー側のauthentication_ldap_saslプラグインがWindowsプラットフォームでサポートされるようになりました。これは、Windowsクライアントプログラムが、authentication_ldap_sasl_clientプラグインを使用した認証にKerberosでGSSAPIを使用できるようになったことを意味します。
    詳細については、SASL-Based LDAP Authenticationを参照してください。(WL #14056)

コンパイル関連

  • Microsoft Windows: MySQLは、Visual Studio 2022を使用すると正しくコンパイルされませんでした。(バグ #35967676)
  • -DWITH_ZLIB=systemチェックを改善しました。(バグ #35968195)
  • MySQLのコンパイルに必要なClangの最小バージョンが、Clang 10からClang 12に引き上げられました。(バグ #35868054)
  • macOSでは、OpenTelemetryコンポーネントはシステムのprotobufライブラリではコンパイルされず、代わりに -DWITH_PROTOBUF=bundled CMakeオプションを使用してバンドルされたバージョンを必要としました。(バグ #35821812)
  • XCode 14以降を使用する場合のコード署名に関するコンパイラ警告を削除しました。(バグ #35818055)
  • Windowsでは、Visual Studioでコンパイルする時に、__cplusplusマクロを有効にしました。(バグ #35808500)
  • MySQLには、Boost C++ライブラリがバンドルされ、ローカルまたは外部のソースの使用のサポートが削除されました。MySQLをコンパイルする時に、バンドルされているBoostライブラリのみが使用されます。
    この変更により、CMakeビルドオプション WITH_BOOST、DOWNLOAD_BOOST、DOWNLOAD_BOOST_TIMEOUTも削除されます。(バグ #35805629)
  • SUSE 12、EL6、Ubuntu 16/18など、サポートされていないプラットフォームへの参照を削除しました。
    追加の変更: WITH_SYSTEM_LIBS CMakeオプションにWITH_ZLIBを追加しました。これは、MySQL 8.0.30 で削除されました。全ての認証プラグインが無効になっている場合は、WITH_FIDOを'none'に設定します。(バグ #35795161)
    参考: バグ #34015600も参照してください。
  • MySQLのコンパイルに必要なデフォルトの標準C++言語バージョンをC++17からC++20に変更しました。(バグ #35781622)
  • openssl3-fipsを-DWITH_SSL CMakeオプションに渡すことで、EL8に代替OpenSSLシステムパッケージのサポートが追加されました(既にopenssl3をサポートしていました)。LDAPやKerberosなどの認証プラグインは、OpenSSLの代替バージョンをサポートしていないため、無効になっています。(バグ #35638881)
  • Linuxでは、mold(バージョン2以降)リンカーのサポートが追加されました。これにより、新しい -DWITH_LD=mold|lldオプションが追加されます。デフォルトでは、これは空であり、標準のリンカーが使用されます。このオプションは、ldリンカーを使用する必要があるEnterprise Linuxではサポートされていません。
    この変更により、-DUSE_LD_LLD CMakeオプションも削除され、代わりにlldが新しいオプションに渡されます。(バグ #34099162)
  • Clangでビルドする時にMYSQL_MAINTAINER_MODEで"-Wdocumentation"を有効にし、それによって明らかになった不正確なドキュメントコメントを修正しました。(バグ #31037561)
  • s390xアーキテクチャのサイクルタイマーを改善しました。
    (バグ #112845、バグ #35949958)
  • Linuxでのコンパイルに関して、OpenSSL 3ライブラリのno-error=deprecated-declarationsフラグがno-deprecated-declarationsに変更されました。
    (バグ #112209、バグ #35755328)

コンポーネント関連

  • MySQL Enterprise データマスキングおよび匿名化コンポーネントには、セカンダリまたはレプリカ上のデータをメモリにフラッシュする機能が含まれるようになりました。これは、ここで説明するいずれかの方法で実行できます:
    • このリリースで追加されたmasking_dictionaries_flush()関数を使用して、フラッシュを手動で実行できます。
    • 新しいcomponent_masking.dictionaries_flush_interval_secondsシステム変数を適切な値に設定することで、スケジューラコンポーネントを利用してメモリを定期的にフラッシュするようにコンポーネントを設定できます。

    詳細については、MySQL Enterprise Data Masking and De-Identificationとこれらの項目の説明を参照してください。(WL #15738)

  • MySQL Enterprise Editionは、component_telemetryコンポーネントを使用したOpenTelemetry形式でのサーバーメトリックデータの収集をサポートするようになりました。このデータは、設定可能なエンドポイントに転送され、OpenTelemetry互換システムで使用できるようになります。
    注意
    テレメトリメトリクスは、Linuxプラットフォーム上のMySQL Enterprise Editionでのみサポートされます。

    Telemetryを参照してください。(WL#15200)

非推奨と削除関連

  • InnoDB: --innodbおよび--skip-innodbサーバーオプションは、MySQL 5.6で非推奨となり、それ以降は効果がありません。これらのオプションは現在削除されています。
    注意
    InnoDBストレージエンジンは常に有効になっており、無効にすることはできません。

    (WL #10909)

  • InnoDB: MySQL 8.0.22で非推奨となったInnoDB memcachedプラグインを削除しました。(WL #15116)
  • レプリケーション: 以前のバージョンのMySQLは非推奨となっていた、MySQLレプリケーションに関連する多数のサーバーオプションと変数が、MySQL 8.3から削除されました。これらのいずれかを使用しようとすると、サーバーで構文エラーが発生します。影響を受けるオプションと変数は次のとおりです:
    • --slave-rows-search-algorithms: 更新または削除を適用する時にテーブル行を検索するためにレプリケーションアプライヤによって使用されるアルゴリズムは、常にHASH_SCAN、INDEX_SCANになり、ユーザーは設定できなくなりました。
    • log_bin_use_v1_events: これにより、MySQL 5.7以降を実行しているソースサーバーが、サポートまたはメンテナンスが終了した以前のバージョンのMySQLにレプリケートできるようになりました。
    • --relay-log-info-file、--relay-log-info-repository、-master-info-file、--master-info-repository: アプライヤメタデータリポジトリと接続メタデータリポジトリのファイルの使用は、クラッシュセーフテーブルに置き換えられ、サポートされなくなりました。Replication Metadata Repositoriesを参照してください。
    • transaction_write_set_extraction
    • group_replication_ip_whitelist: 代わりに、group_replication_ip_allowlistを使用してください。
    • group_replication_primary_member: 不要になりました。代わりに、パフォーマンススキーマのreplication_group_membersテーブルのMEMBER_ROLE列を確認してください。

    (WL #11007、WL #12899、WL #12927、WL #13161、WL #13959、WL #13951、WL #15861)

  • レプリケーション: グローバルトランザクション識別子(GTID)がレプリケーションに使用される場合、既に適用されているトランザクションは自動的に無視されます。つまり、IGNORE_SERVER_IDSはGTIDモードと互換性がありません。GTIDベースのレプリケーションとこのオプションを併用することは、MySQL 8.0で非推奨となり、MySQL 8.3では許可されなくなりました。gtid_modeがONの場合、空ではないIGNORE_SERVER_IDSリストを使用したCHANGE REPLICATION SOURCE TOがエラーで拒否されるようになりました。同様に、無視されるサーバーIDのリストを使用して既存のレプリケーションチャネルが作成された場合、SET gtid_mode=ONも拒否されます。GTIDベースのレプリケーションを開始する前に、関係するサーバー上で無視されたサーバーIDリストを確認してクリアします。これを行うためには、SHOW REPLICA STATUSの出力を確認します。このような場合、次のようにサーバーIDの空のリストを指定してCHANGE REPLICATION SOURCE TOを発行することでリストをクリアできます:
    CHANGE REPLICATION SOURCE TO IGNORE_SERVER_IDS = ();

    詳細については、CHANGE REPLICATION SOURCE TO StatementおよびRestrictions on Replication with GTIDsを参照してください。(WL #11005)

  • グループレプリケーション: グループレプリケーションのリカバリでは、バイナリログ内のグループメンバーシップの変更をマークするためにView_change_log_evenを使用しなくなりました。代わりに、グループの全てのメンバーがMySQLバージョン 8.3.0以降である場合、メンバーは圧縮されたリカバリメタデータを共有し、新しいメンバーがグループに参加する時にそのようなイベントはログに記録されません。リカバリメタデータには、GCSビューID、認証されたトランザクションのGTID_SET、および認証情報が含まれます。
    この作業の一環として、group_replication_view_change_uuidシステム変数は非推奨となり、MySQLの将来のバージョンで削除される予定です。この変数の置き換えや代替は計画されていません。(WL #14595)
  • API: 次の非推奨のC API関数が削除されました。
    • mysql_kill(): 代わりに、mysql_real_query()またはmysql_query()を使用してKILLステートメントを実行します。
    • mysql_list_fields(): 代わりに、mysql_real_query()またはmysql_query()を使用してSELECT * FROM table LIMIT 0を実行します。(これは、--column-type-infoオプションを使用して開始した後でmysqlクライアントでステートメントを実行するのとほぼ同じです。)
      MYSQL_FIELD構造のchar *defメンバーは、この関数でのみ使用されていたため、削除されました。
    • mysql_list_processes(): 代わりに、mysql_real_query()またはmysql_query()を使用してSHOW PROCESSLISTステートメントを実行します。
    • mysql_refresh(): 代わりに、mysql_real_query()またはmysql_query()を使用してFLUSHステートメントを実行します。
      この関数の削除に伴い、mysqladmin flash-threadsコマンドも削除されます。
    • mysql_reload(): 代わりに、mysql_real_query()またはmysql_query()を使用してFLUSH PRIVILEGESステートメントを実行します。
    • mysql_shutdown(): 代わりに、mysql_real_query()またはmysql_query()を使用してSHUTDOWNステートメントを実行します。
    • mysql_ssl_set(): mysql_options()を適切なオプションとともに使用して、証明書とキーファイル、暗号化暗号などを指定します。

    mysql_shutdown()は、MySQL 8.0で非推奨になりました。mysql_set_ssl()は、MySQL 8.0.35およびMySQL 8.2.0で非推奨になりました。リストされている残りの関数は、MySQL 5.7.11で非推奨になりました。
    これらの変更により、MySQL C APIライブラリのバージョンが22.1から23.0に引き上げられました。(バグ #36029117、WL #10911、WL #11092、WL #13448)

  • コンパイラは、MySQL 8.2.0 で非推奨となり、mysql_stmt_bind_named_param()に置き換えられたmysql_stmt_bind_param() C API関数の非推奨警告を発行するようになりました。(バグ #35819974)
  • --character-set-client-handshakeおよび--old-style-user-limitsサーバーオプションは、以前はサポートまたはメンテナンスが終了した非常に古いバージョンのMySQLとの互換性のために使用されていました。これらは有用な目的を果たさなくなったため、両方のオプションが削除されました。(WL #13221、WL #13229)
  • MySQL 8.0.23で非推奨となったFLUSH HOSTSステートメントは削除されました。ホストキャッシュをクリアするためには、パフォーマンススキーマのhost_cacheテーブルをトランケートするか、代わりにmysqladmin flash-hostsを使用します。 (WL #14330)

GTID を使用したレプリケーション

  • このリリースでは、MySQLレプリケーションおよびタグを使用したグループ レプリケーションで使用されるグローバルトランザクション識別子(GTID)の形式が拡張され、トランザクションのグループを識別できるようになります。この機能強化により、特定のトランザクショングループのGTIDに一意の名前を割り当てることが可能になります。例えば、データ操作を含むトランザクションは、GTIDを比較するだけで、管理操作から発生したトランザクションと簡単に区別できます。
    新しいGTID形式は、UUID::NUMBERで、は任意の文字列です。これを有効にするためには、gtid_nextシステム変数の値をAUTOMATIC:に設定します。このタグは、現在のセッションで発生する全てのトランザクションに対して持続し(SET gtid_nextを使用して変更しない限り)、そのようなトランザクションのコミット時またはグループレプリケーションを使用している場合に、認証時に適用されます。gtid_nextを::NUMBERに設定して、単一トランザクションのUUIDを任意の値に設定し、それにカスタムタグを割り当てることもできます。どちらの場合も、ユーザーは、タグが特定のレプリケーショントポロジに対して一意であることを確認する責任があります。
    GTIDの元のUUID:NUMBER形式は、以前のバージョンのMySQLで実装されていたように、変更せずに引き続きサポートされます。GTIDを使用して既存のレプリケーション設定を変更する必要はありません。
    gtid_nextをAUTOMATIC:または::NUMBERに設定するためには、このリリースで追加された新しい権限 TRANSACTION_GTID_TAGが必要です。これは、元のサーバーとレプリカアプライヤスレッドのPRIVILEGE_CHECKS_APPLIERの両方に当てはまります。これは、管理者がSET @gtid_next=AUTOMATIC:またはSET @gtid_next=::NUMBERの使用を、必要なMySQLユーザーまたはロールのセットに制限できることも意味します。特定のデータまたは運用ドメインに関連するユーザーのみが、割り当てられたタグを使用して新しいトランザクションをコミットできるということです。
    アップグレードとの相互作用: MySQLの以前のバージョンからMySQL 8.3にアップグレードする場合、既にBINLOG_ADMIN権限を持つユーザーアカウントまたはロールにTRANSACTION_GTID_TAG権限が自動的に付与されます。
    組み込み関数 GTID_SUBSET()、GTID_SUBTRACT()、WAIT_FOR_EXECUTED_GTID_SET()は、タグ付きGTIDと互換性があります。
    詳細については、Changing GTID Mode on Online Serversを参照してください。gtid_nextシステム変数とTRANSACTION_GTID_TAG権限の説明も参照してください。(WL #15294)

INFORMATION_SCHEMA関連

  • FULLTEXTインデックスを含むテーブルでOPTIMIZE TABLEを実行すると、インデックスが予期した時点で完全に最適化されなかったため、追加のパスが必要でした。(バグ #35502793)
  • このリリースでは、非推奨のINFORMATION_SCHEMA.PROCESSLISTテーブルの使用を追跡するために、次の2つのステータス変数が実装されています:
    • Deprecated_use_i_s_processlist_countは、サーバーが最後に起動されてからの、クエリ内のPROCESSLISTテーブルへの参照の数を示します。
    • Deprecated_use_i_s_processlist_last_timestampには、PROCESSLISTテーブルが最後にアクセスされた時刻が格納されます。これはタイムスタンプ値(Unix Epoch以来のマイクロ秒数) です。

    (WL #16085)

MySQL Enterprise関連

  • データマスキングコンポーネントは、関連する内部masking_dictionariesテーブルを保存するための専用スキーマの指定をサポートするようになりました。以前は、mysqlシステムスキーマが唯一のストレージオプションを提供していました。新しいcomponent_masking.masking_database読み取り専用変数を使用すると、サーバー起動時に代替スキーマ名を設定して永続化できます。(WL #15733)

オプティマイザー関連

  • 採用されたハッシュアルゴリズムでは、HASHフィールドを使用して一意性をチェックする時にパフォーマンスが低下しました。(バグ #109548、バグ #34959356)

パッケージ関連

  • 重要な変更: MySQLのダウンロード可能なパッケージの署名に使用されるGnuPGビルドキー(A8D3785C)が更新されました。以前のGnuPGビルドキー(3A79BD29)は、2023年12月14日に期限切れになりました。GnuPG署名チェックを使用してMySQLのダウンロード可能なパッケージの整合性と信頼性を検証する方法、または、公開GnuPGビルドキーのコピーを取得する方法については、Signature Checking Using GnuPGを参照してください。
    GnuPGキーの更新により、repo.mysql.comを使用するように設定されたシステムは、aptまたはyumを使用してMySQL 8.0.36以降またはMySQL 8.3.0以降にアップグレードする時に署名検証エラーを報告する場合があります。この問題を解決するためには、次のいずれかの方法を使用します:
    • https://dev.mysql.com/downloads/からMySQL APTまたはYUMリポジトリセットアップパッケージを手動で再インストールします。
    • MySQL GnuPG公開キーをダウンロードし、システムGPGキーリングに追加します。

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

  • 負荷が高いサーバー上でSELECT * from Performance_schema.data_locksを実行すると、MySQLが大量のメモリを消費し、予期せず終了する可能性がありました。
    このリリースの時点で、このようなクエリの実行に使用されるメモリは、memory/performance_schema/data_containerで計測されるようになり、メモリ消費を観察できるようになりました。(バグ #35240825)
  • 負荷が高いサーバー上でSELECT * from performance_schema.data_locksを実行すると、InnoDBでデッドロックが発生する可能性がありました。(バグ #35068461)
    参考: バグ #35240825も参照してください。
  • ストアドプログラムを実行する時に、パフォーマンススキーマインストゥルメンテーションにより不必要なオーバーヘッドが発生しました。
    このリリースでは、statement/sp/stmtを除く全てのストアドプロシージャマイクロ命令(statement/sp/%)がデフォルトで無効になっています。(バグ #27934653)
  • パフォーマンススキーマステートメントインストゥルメンテーションのパフォーマンスが向上しました。具体的には、MESSAGE_TEXTデータの収集がより効率的になりました。(バグ #112621、バグ #35916912)
  • 負荷がかかる特定の状況では、一意のキーが定義されているにもかかわらず、パフォーマンススキーマが同じ行を2回返す可能性がありました。この問題は、クエリダイジェスト、ユーザー名、ホスト名、アカウント名(user@host)で発生する可能性がありました。(バグ #110555、バグ #35239372)
  • コード分析によって発見されたが、ユーザーによって報告されていなかった、performance_schema.table_handlesに関する潜在的な問題を削除しました。(バグ #108501、バグ #34606682)

プラガブル認証

  • このリリース以降、PAM認証プラグインのデバッグに使用されるAUTHENTICATION_PAM_LOG環境変数の動作が次のように変更されます:
    • AUTHENTICATION_PAM_LOGを任意の値に設定すると(次の項目で説明する場合を除き)、診断メッセージにパスワードが含まれなくなります。
    • 診断メッセージにパスワードを含めるためには、AUTHENTICATION_PAM_LOG=PAM_LOG_WITH_SECRET_INFOを設定します。

    詳細については、PAM Authentication Debuggingを参照してください。(バグ #74313、バグ #20042010)

スレッドプール関連

  • 次のように、追加のスレッドプール接続情報がMySQLパフォーマンススキーマに追加されました:
    • 各スレッドプール接続に関する情報を含むtp_connectionsテーブルが追加されました。
    • tp_thread_stateテーブルに次の列を追加しました:TIME_OF_ATTACH、MARKED_STALLED、STATE、EVENT_COUNT、ACCUMULATED_EVENT_TIME、EXEC_COUNT、ACCUMULATED_EXEC_TIME
    • tp_thread_group_stateテーブルに次の列を追加しました:EFFECTIVE_MAX_TRANSACTIONS_LIMIT、NUM_QUERY_THREADS、TIME_OF_LAST_THREAD_CREATION、NUM_CONNECT_HANDLER_THREAD_IN_SLEEP、THREADS_BOUND_TO_TRANSACTION、QUERY_THREADS_COUNT、TIME_OF_EARLIEST_CON_EXPIRE。

    これらのテーブルの詳細については、Performance Schema Thread Pool Tablesを参照してください。スレッドプールプラグインの詳細については、MySQL Enterprise Thread Poolを参照してください。(WL #15515)

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

  • 重要な変更: レプリケーション: binlog_transaction_dependency_trackingサーバーシステム変数は、MySQL 8.2.0で非推奨になりました。この変数の最終的な削除に備えて、そのデフォルト値はWRITESETになりました。この変数またはその機能を置き換える計画はなく、後でサーバーの内部に組み込まれる予定です。(WL #15861)
  • 重要な変更: OpenSSLライブラリがバンドルされているプラットフォームに関して、MySQL Server用のリンクされたOpenSSLライブラリがバージョン 3.0.12に更新されました。OpenSSL バージョン 3.0.12で修正された問題については、https://www.openssl.org/news/cl30.txtで説明されています。(バグ #36033684)
  • パフォーマンス: NDB Cluster: NDBバイナリログインジェクターは、アリーナ割り当てを使用します。場合によっては、スキーマの変更を処理し、バイナリログの現在の状態を追跡する時に、スレッドローカルポインターの変更によってこれのアリーナが強制され、エポック処理中に実行された全ての割り当てをキャッチしようとしました。エポックの終わりに、これらのポインタはリセットされ、アリーナメモリは解放され、アリーナ構造は破棄されました。これによりメモリが解放されましたが、次のエポックに向けてメモリを再度設定する必要もありました。スレッドローカルポインターの変更により、別のサブシステムの機能をアクティブ化する時にメモリが誤って割り当てられるリスクも生じました。このリリースでは、この機能に次の改善が加えられています:
    • スレッドローカルポインターへの変更は削除され、エポック中の割り当てに使用されるアリーナを提供する明示的な引数に置き換えられます。
    • 次のエポックでアリーナを再利用するため、再度セットアップする必要がなくなります。

    これらの変更は内部のみですが、連続するエポックにわたるメモリの解放と再割り当てを節約することで、顕著な改善をもたらすはずです。(WL #15002)

  • グループレプリケーション: group_replication_set_as_primary()は、新しいプライマリが選択される前に、DDLステートメントおよびDCLステートメントが完了するのを待機するようになりました。これには、次のステートメントが含まれます: ALTER DATABASE、ALTER FUNCTION、ALTER INSTANCE、ALTER PROCEDURE、ALTER SERVER、ALTER TABLESPACE、ALTER USER、ALTER VIEW、CREATE DATABASE、CREATE FUNCTION、CREATE PROCEDURE、CREATE ROLE、CREATE SERVER、CREATE SPATIAL REFERENCE SYSTEM、CREATE TABLESPACE、CREATE TRIGGER、CREATE USER、CREATE VIEW、DROP DATABASE、DROP FUNCTION、DROP PROCEDURE、DROP ROLE、DROP SERVER、DROP SPATIAL REFERENCE SYSTEM、DROP TABLESPACE、DROP TRIGGER、DROP USER、DROP VIEW、GRANT、RENAME TABLE、REVOKE。
    これらは、MySQL 8.1で追加されたステートメント、または、この点で既にサポートされているステートメントに追加されたものです。MySQL 8.3でサポートされているこのような全てのステートメントのリストを含む詳細については、MySQL 8.3マニュアルの group_replication_set_as_primary()関数の説明を参照してください。(WL #15752)
  • Microsoft Windows: Windowsでは、MySQL Configuratorがインプレースアップグレードを実行できるようになりました。例えば、MySQL Server 8.3.0は、データディレクトリの更新と名前変更を含む、既存のMySQL Server 8.2.0インストールを置き換えることができます。(WL #15882)
  • include/my_bit.hとsql/join_optimizer/bit_utils.hの一部のビット関数を、C++20で追加されたstd::popcount()やstd::has_single_bit()などの標準ライブラリ関数に置き換えました。置き換えられる関数には、is_single_bit()、my_clear_highest_bit()、my_bit_log2()、my_round_up_to_next_power()、my_bit()、my_count_bits()などが含まれます。(バグ #35813111)
  • EXPLAIN FORMAT=JSONステートメントで使用されるJSON出力形式のバージョンを決定するために、explain_json_format_versionシステム変数が追加されました。1(デフォルト)では、バージョン 1が使用されます。これは、以前のバージョンのMySQLでそのような全てのステートメントに使用されていたものと同じJSON出力形式です。この変数を2に設定すると、サーバーはEXPLAIN FORMAT=JSON出力に対して、このリリースでも導入されたバージョン 2形式を使用します。バージョン 2形式はアクセスパスに基づいており、MySQL Optimizerの将来のバージョンとの互換性を向上させることを目的としています。
    詳細と例については、Obtaining Execution Plan Informationを参照してください。(WL #15684)

    主なバグ修正

    • 重要な変更: レプリケーション: binlog_formatがMIXEDで、binlog_transaction_dependency_trackingがWRITESETまたはWRITESET_SESSIONに設定されている場合、トランザクションのステートメント部分の依存関係は追跡されず、正しく計算されず、MTAレプリカ上のトランザクション間で衝突が発生しました。
      この方法で競合検出に書き込みセット情報を使用すると、偽陰性が発生する可能性があるため、競合チェックでの書き込みセットの使用を行ベースのログのみ(binlog_format=ROW)に制限するようになりました。(バグ #35931702)
    • InnoDB: InnoDBテーブル統計は、一括ロードされたステートメントによって更新されませんでした。(バグ #35889669)
    • InnoDB: LHSとRHSの比較値が、関連するエラーハンドラーに追加されました。(バグ #35814266)
    • InnoDB: DB_CORRUPTエラーコードをより適切に処理するために、recv_apply_hashed_log_recs()が改善されました。(バグ #35595808)
    • InnoDB: アダプティブハッシュインデックス(AHI)で使用されるハッシュ関数が改善され、パフォーマンスが向上しました。(バグ #35449386)
    • InnoDB: 起動時に変更バッファエントリが存在する場合、無効になったinnodb_validate_tablespace_pathsオプションは強制されなくなり、代わりにMySQLサーバーは全てのテーブルスペースの検証を続行します。そうしないと、セカンダリインデックスが破損する可能性がありました。(バグ #35208990)
    • InnoDB: DDLとDMLの同時操作中に、オンラインログが大きくなりすぎると、DDLが失敗する可能性がありました。この問題を防ぐためにバッファ処理が改善されました。(バグ #35115601)
    • InnoDB: 全てのバッファプールページからAHIインデックスをクリアすると、ブロックミューテックスを取得する前にブロック状態がBUF_BLOCK_MEMORYに代わる可能性があり、予期しない停止が発生します。(バグ #35037114)
    • InnoDB: 行ロックがない時に、Innodb_row_lock_current_waits変数はゼロ以外の値を示す可能性がありました。
      (バグ #112532、バグ #35849707)
    • InnoDB: リカバリ中のFIL_PAGE_LSNの処理に関連する冗長なコードを削除しました。
      (バグ #108731、バグ #34687854)
    • レプリケーション: イベントの適用中にエラーが発生した場合、報告されたエラーが現在のイベントではなく前のイベントに適用される場合がありました。(バグ #35945223)
    • レプリケーション: ソースでbinlog_transaction_compressionを有効にすると、レプリカでのER_RPL_MTA_STATISTICSメッセージが抑制されました。(バグ #35923771)
    • レプリケーション: パフォーマンススキーマメモリインストゥルメンテーションでLog_eventイベントに使用される現在のバイト数の計算に関する問題により、レプリカ上のsql/replica_sqlスレッドが際限なく増加し、サイズが減少しないように見えました。(バグ #35546877)
    • レプリケーション: CREATE TABLE AS SELECTのレプリケーション中にレプリケーションを停止すると、サーバーが終了しました。(バグ #33934013)
    • グループレプリケーション: シングルプライマリモードで実行している場合、パフォーマンススキーマのsetup_instrumentsテーブルのmemory/group_rpl/Gcs_message_data::m_bufferキーが負の値を報告することがありました。(バグ #35940509)
    • グループレプリケーション: 大規模な停止の後、全てのインスタンスがアクセス可能になった時に、クラスターを再起動するとハングし、インスタンスの再参加に失敗しました。
      このような場合にこの問題が発生するのは、古いセカンダリがノードに接続するための古い資格情報を保持しており、部分的な接続が発生し、2番目のサーバーがグループに再参加しようとした時に、プライマリに接続してadd_node()コマンドを送信することはできましたが、プライマリから順番に接続できなかったためでした。解決策は、add_node()を受信した時に、新しいノードとの双方向通信が確立されていることを検証することです。(バグ #35763950)
      参考: バグ #34898318も参照してください。
    • グループレプリケーション: xcom_tcp_server_startup()での潜在的なメモリ リークを削除しました。(バグ #35594709)
    • グループレプリケーション: マネージドレプリケーションチャネル(非同期接続フェイルオーバーメカニズムが有効になっているチャネル)のモニターI/Oスレッドは、エラーログエントリに根本原因が欠けているため、いくつかの理由で失敗する可能性があり、次の内容のみが報告されます:[Warning] [MY-013684] [Repl] The Monitor IO thread failed to detect if the source belongs to the group majority on the source (host:127.0.0.1 port:3310 network_namespace:) for channel 'read_replica_replication'.(バグ #35082638)
    • グループレプリケーション: plugin/group_replication/src/group_actions/group_actions_transaction_controller.cc内のTransaction_monitor_thread::start()によって開始されたロックは、明示的に解放されることはありませんでした。(バグ #35064211)
    • グループレプリケーション: group_replication_set_as_primary()によって設定されたタイムアウトは、DDLステートメントを終了しませんでした。(バグ #35042876)
    • グループレプリケーション: レプリケーションチャネルがエラー状態にある時に強制的にSTART GROUP_REPLICATIONを実行すると、サーバーが計画外に終了する可能性がありました。(バグ #34724344)
    • グループレプリケーション: plugin/group_replication/src/certifier.ccで発生する可能性のあるメモリリークを削除しました。(バグ #110518、バグ #35226747)
    • macOS: secure_file_privシステム変数がMac OS上で常に正しく動作するとは限りませんでした。(バグ #30274493)
    • Microsoft Windows: デバッグモードで出力が正しいことを保証するために例外処理が改善されました。(バグ #35944853)
    • JSON: NULLIF()、COALESCE()、シフト(>>)演算子にエラー処理の欠落チェックが追加されました。(バグ #35513196)
      参考: バグ #31358416も参照してください。
    • JSON: JOINとGROUP BYは、一部のJSON列値を異なる方法で処理しました。(バグ #101048、バグ #31969607)
    • Enterprise Linux RPMを構築する場合、ビルドスクリプトはより新しいストリップコマンド(/opt/rh/gcc-toolset-12の下)を指すようになり、対応するdwzツールが利用可能であることを確認するようになりました。(バグ #36086236)
    • BIO_get_mem_data()は、間違った引数の型を使用しました。
      (バグ #35950004)
    • access_path.ccのCreateIteratorFromAccessPath()でのアサーションエラーを削除しました。(バグ #35944739)
      参考: この問題は、バグ #32788576のリグレッションです。
    • シャットダウン中、InnoDBのスレッドのパージは、(データの量によっては)その作業が完了するまでにかなりの時間がかかる場合があります。これにより、シャットダウンプロセスがハングしたという印象をユーザーに与える可能性がありました。この修正により、このステップが進行中であることを示す外部から見えるsystemd通知が追加されます。(バグ #35902058)
    • 場合によっては、不適切に初期化されたプラグインによってインストールされたロード可能な関数を呼び出すと、計画外のシャットダウンが発生しました。(バグ #35889261)
    • MYSQL_FIREWALLプラグインがカスタムスキーマを使用するように設定されていたが、サーバーの起動時に適切に初期化できなかった場合、後続のエラーや障害が発生する可能性がありました。(バグ #35853298)
    • GROUP BYを使用した一部のネストされたクエリが正しく処理されませんでした。(バグ #35846402、バグ #35945822)
      参考: この問題は、バグ #32918400のリグレッションです。
    • デバッグモードのdbug_dumpのアクセスパスで間違った値が使用されました。
      (バグ #35835858)
    • 等価性伝播により、CAST式のNULL可能性を変更することなく、CAST()内のNULL非許容(プライマリキー)列がNULL可能列に置き換えられました。(バグ #35829972)
      参考: バグ #34898903も参照してください。
    • -DPROTOBUF_BUILD_SHARED_LIBS=OFFを使用してMySQLを構築できませんでした。(バグ #35827217)
    • mysqld -Dは、そのエラーログ情報の一部を標準出力に出力しました。(バグ #35810857、バグ #35830459)
    • hash_join_iterator.ccのHashJoinIterator::Init()のアサートを削除しました。(バグ #35789589)
    • ORDER BY句を含むテーブル値コンストラクターがINまたはEXISTSサブクエリとして使用された場合に見られるアサーションを削除しました。(バグ #35785452)
    • 限られたケースではありますが、データをMD5()暗号化関数に渡すとサーバーが停止する可能性がありました。(バグ #35764496)
    • ビューからの一部の副選択は、常に正しく処理されるとは限りませんでした。(バグ #35738548)
    • 多数のテーブルの一括名前変更などの操作を実行している時に、CREATE TABLE ... SELECTのようなデータ定義ステートメントを同時に実行すると、サーバーが予期せず停止する可能性がありました。(バグ #35735937)
    • ハンドラー状態のリソース割り当てが改善されました。(バグ #35713711)
    • UPDATE HISTOGRAMは、全ての場合に期待どおりに動作しませんでした。
      UPDATE HISTOGRAMは、全ての場合に期待どおりに動作しませんでした。(バグ #35710404)
    • EXPLAIN ANALYZEでは、必ずしも予期した結果が得られるとは限りませんでした。(バグ #35710383)
    • サブクエリの解決中にエラーが発生しました。(バグ #35710373)
      参考: この問題は、バグ #35184353のリグレッションです。
    • 一部の行サブクエリは常に正しく処理されるとは限りませんでした。(バグ #35710218)
    • 使用されているテーブル情報の更新が、テーブルが開かれた直後の次の実行の開始まで延期されるようになりました。全てのテーブルオブジェクトが適切な状態にあることがわかります。(バグ #35710213)
    • 一部のHAVINGクエリでは予期した結果が得られませんでした。(バグ #35710183)
    • hash_join_iterator.ccのアサーションを削除しました。(バグ #35703114)
      参考: この問題は、バグ #34940000のリグレッションです。
    • complex_iterators.ccのアサートを削除しました。(バグ #35686098)
    • 一部の再帰CTEは期待どおりに機能しませんでした。(バグ #35654240)
    • INSTALL COMPONENTとSET GLOBALをサブクエリと組み合わせると、サーバーが終了する可能性がありました。(バグ #35647759)
    • OVER (PARTITION ...)を使用する一部のクエリは、常に正常に実行されるわけではありませんでした。(バグ #35627798)
    • ROLLUPを使用した一部のサブクエリは、常に正しく処理されるとは限りませんでした。(バグ #35621842、バグ #35804794)
    • 特定のクエリに対してEXPLAIN FORMAT=TREEを実行する場合、Appendアクセスパスの最初の行を読み取るコストは、最初の子入力アクセスパスの場合よりも低かったです。これは不可能なはずです。(バグ #35590128)
    • sql/join_optimizer/join_optimizer.ccのIsBitSet()のアサーションを削除しました。(バグ #35590108)
    • Windowsインストール MSIインターフェイスからCPACK_COMPONENT_GROUP_INFO_DISPLAY_NAME設定オプションを削除しました。INFO_BINおよびINFO_SRCファイルが常にインストールされるようになりました。(バグ #35529968)
    • サブクエリから派生への変換を試行すると、射影リスト内のフィールドがGROUP BYの一部でなく、機能的にGROUP BYに依存していない場合でも、ER_FIELD_IN_GROUPING_NOT_GROUP_BYエラーはスローされませんでした。(バグ #35508108)
    • ウィンドウ関数を使用する一部のクエリは、常に正しく処理されるとは限りませんでした。(バグ #35471471)
    • デバッグビルドでは、大文字と小文字が変更された列名によりサーバーが終了する可能性がありました。(バグ #35449266)
    • MySQL ServerおよびMySQL Clusterのパッケージには、INFO_SRCファイルの2つのコピーが含まれていました。(バグ #35400142)
    • ウィンドウ関数の引数内にユーザー変数を設定すると、ウィンドウフレームバッファを使用して評価され、アサートが発生しました。式内のユーザー変数の設定はすでに非推奨になっています。この修正は、単にアサートを回避するだけです。(バグ #35390341、バグ #36008133)
      参考: この問題は、バグ #32644631、バグ #32802301のリグレッションです。
    • Item_typecast_signed::val_int()のアサートを削除しました。(バグ #35049440)
    • MySQLが予期せず終了した時にスタックトレースを出力するmy_print_stacktrace()からの出力を改善しました。(バグ #34904177、バグ #36027494)
    • utilities/comp_err.ccのエラーメッセージパーサーは、エスケープされたアポストロフィ文字を正しく処理しませんでした。(バグ #34637697)
    • ロールに権限が付与された後、明示的に付与されていない権限をロールから取り消すと成功したように見え、エラーや警告は返されませんでした。(バグ #34063709)
    • 一部のSELECT DISTINCTクエリは常に正しく処理されるとは限りませんでした。(バグ #33725447)
    • sql/field.ccのアサーションエラーを削除しました。(バグ #112503、バグ #35846221)
    • sql/sql_resolver.ccのアサーションを削除しました。(バグ #112498、バグ #35846192)
    • SELECT AVG(...) OVER (PARTITION BY ...)の形式を持つ一部のクエリは、常に正しく処理されるわけではありませんでした。(バグ #112460、バグ #35710179、バグ #35845413)
    • 公式のMySQL YumまたはSUSEリポジトリを使用してMySQLをアップグレードすると、常にMySQLサービスが有効になります。今後は、インストール後にのみサービスが有効になり、アップグレード中は既存の値が保持されます(編集されません)。(バグ #112382、バグ #35823558)
    • MEM_ROOT::AllocBlock()は、ブロックサイズとmininum_lengthが一致しないため、minimum_length > wanted_lengthという条件を満たしていませんでした。ForceNewBlock()からの正常な戻り(false)には、mininum_lengthをサポートする新しいブロックがあることが期待されますが、mininum_lengthが大きい場合、この想定は失敗します。したがって、AllocBlock()はその規約に準拠していませんでした。
      (バグ #112304、バグ #35793743)
    • NO_BNLオプティマイザーヒントを使用すると、同じクエリで異なる結果が返されました。(バグ #112296、バグ #35788971)
    • デバッグビルドで、空の論理範囲を指定してNTH_VALUE()ウィンドウ関数を使用すると、アサーションエラーが発生しました。(バグ #111562、バグ #35537311)
    • CHAR(0)やBINARY(0)など、長さ0の列を持つデータをテーブルに挿入すると、デバッグビルドでアサーションが失敗することがありました。現在は、それほど厳密ではないアサーションは、ソースからコピーされたゼロ以外のバイト数がターゲットと同一であることが検出された場合にのみ、より正確に失敗します。(バグ #111450、バグ #35507763)
    • いくつかの関数には引数に対するデフォルトのデータ型割り当てがなかったため、デバッグビルドでアサーションエラーが発生し、プリペアドステートメントに影響を与える可能性がありました。現在、次のデフォルトのタイプが割り当てられます:
      • format_bytes()およびformat_pico_time()の場合はDOUBLE
      • ps_thread_id()の場合はBIGINT

      (バグ #110677、バグ #35287798)

    • 相関ラテラルサブクエリまたは(その他の)依存サブクエリのVALUESステートメントにより、誤った結果が生成されました。(バグ #109252、バグ #110076、バグ #34852090、バグ #35087820)
    • ウィンドウ関数の引数にサブクエリが含まれている場合、そのサブクエリのアクセスパスがEXPLAIN FORMAT=TREEによって2回出力されました。このような場合に重複したパスを無視するようにすることで、この問題を修正しました。(バグ #103609、バグ #32855925)
    • 場合によっては、ビューからの選択により少量のメモリがリークすることがありました。(バグ #103133、バグ #32764586)
    • IN()演算子とテーブル値コンストラクターを使用したWHERE条件は、全ての行を返しました。影響を受けるクエリの例は、SELECT * FROM t1 WHERE a IN (VALUES ROW(5), ROW(55))です。(バグ #98268、バグ #30775369)
    • --waitコマンドラインオプションは、mysqlクライアントでは機能しませんでした。(バグ #31422、バグ #11747227)

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


    MySQL Editions

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