2021.08.05

MySQL

MySQL Community Server 8.0.26 GA版(リリース日:2021年7月20日)

主な変更点

■ 監査ログ関連

● 以前は、MySQL Enterprise Auditによってログに記録された各イベントには、SQLステートメントのリテラルテキストが含まれていました。(ステートメントに機密情報が含まれている可能性があるため)代替手段を提供するために、監査ログフィルタリング言語は、リテラルテキストではなくステートメントのダイジェストのログへの記録をサポートするようになりました。例えば、次のステートメントをログに記録する代わりに:

  SELECT * FROM orders WHERE some_sensitive_column=1234567

 監査ログプラグインは、次のダイジェストをログに記録できます:

  SELECT * FROM `orders` WHERE `some_sensitive_column` = ?

 これは、実際のデータ値ではなくパラメーターマーカーが表示される、プリペアドステートメントに対して既にログに記録されているものと似ています。

 ダイジェストロギングを実行するためには、ステートメントリテラルテキストをその対応するダイジェストに置き換える監査フィルター定義を使用します。

 テキストの置換は監査の初期段階(フィルタリング中)で行われるため、ステートメントのリテラルテキストまたはダイジェスト値をログに記録するかどうかの選択は、後で書き込まれるログ形式(つまり、監査ログプラグインがXMLまたはJSON出力を生成するかどうか)に関係なく適用されます。(バグ #31482609)

● MySQL Enterprise Auditの場合、新しいaudit_log_format_unix_timestampシステム変数を使用すると、各監査レコードに時間フィールドを含めることができます。フィールド値は、監査イベントが生成された日時を示すUNIXタイムスタンプ値を表す整数です。時間フィールドは、JSON形式のログファイルでのみサポートされます。

● MySQL Enterprise Auditの場合、新しいaudit_log_max_sizeシステム変数は、結合されたログファイルのサイズに基づいて監査ログファイルのプルーニングを有効にします。効果を得るためには、audit_log_max_sizeでaudit_log_rotate_on_sizeが0より大きい必要があります。それが当てはまる場合、プルーニングアルゴリズムはaudit_log_max_sizeをaudit_log_prune_secondsと組み合わせて使用し、audit_log_max_sizeのゼロ以外の値がaudit_log_prune_secondsのゼロ以外の値よりも優先されます。

■ 認証関連

● 以前は、サーバーからクライアントに送信される「hello」パケットの一部として、サーバーはクライアントサイドのプラグインではなくサーバーサイドの認証プラグインの名前を送信していました。サーバーはクライアントサイドの名前を送信するようになりました。これはクライアントのニーズにより適していて、余分なプロトコルのラウンドトリップを回避するのに役立つ場合があります。

■ コンパイル関連

● macOS:ARM上でmacOS 11用(つまり、Apple M1システム用)のMySQLをビルドできるようになりました。(バグ #32386050、バグ #102259)

● openSUSE 15およびSLES 15でのビルドには、現在、パッケージgcc-9およびgcc9-c++にあるGCC 9が必要です。

 SLES 12でのビルドには、現在、パッケージgcc-10およびgcc10-c++にあるGCC 10が必要です。

 また、libmysqlclient C APIライブラリに基づくサードパーティアプリケーションをビルドする場合は、名前付きGCCバージョンを使用することをお勧めします。(バグ #32886268、バグ #32886439)

● Ubuntu 18.04(bionic)でのビルドには、現在、パッケージgcc-8およびg++-8にあるGCC 8が必要です。また、libmysqlclient C APIライブラリに基づくサードパーティアプリケーションをビルドする場合は、GCC 8を使用することをお勧めします。(バグ #32877062)

● デフォルトで推奨されるコンパイラとなるGCC 10を使用してSolaris上でMySQLをビルドできるようになりました。また、libmysqlclient C APIライブラリに基づくサードパーティアプリケーションをビルドする場合は、GCC 10を使用することをお勧めします。(バグ #32552988)

■ コンポーネント関連

● 新しいコンポーネントサービスにより、サーバーコンポーネントはシステム変数値を設定できます。このサービスに関する情報は、https://dev.mysql.com/doc/index-other.htmlで入手できるMySQL Server Doxygenのドキュメントを参照してください(s_mysql_mysql_system_variable_update_stringおよびmysql_system_variable_update_string_impを検索してください)。

■ 非推奨と削除関連

● TLSv1およびTLSv1.1接続プロトコルは非推奨になり、それらのサポートは今後のMySQLバージョンで削除される可能性があります(背景については、IETFメモ Deprecating TLSv1.0 and TLSv1.1を参照してください)。より安全なTLSv1.2およびTLSv1.3プロトコルを使用して接続を確立することをお勧めします。TLSv1.3では、MySQLサーバーとクライアントアプリケーションの両方がOpenSSL 1.1.1以降でコンパイルされている必要があります。

 サーバー側では、この非推奨で次の影響があります:

  ・tls_versionまたはadmin_tls_versionシステム変数に非推奨のTLSプロトコルを含む値が
   割り当てられている場合、サーバーは非推奨のプロトコルごとに警告を生成します。

    ○ 割り当てがサーバーの起動中に発生した場合、警告はエラーログに表示されます。

    ○ 割り当てが実行時に発生した場合、ALTER INSTANCE RELOAD TLSステートメントの
     実行結果に警告が追加されます。

  ・クライアントが非推奨のTLSプロトコルを使用して正常に接続する場合、サーバーは
   エラーログに警告を書き込みます。

 クライアント側では、非推奨は目に見える影響を及ぼしません。非推奨のTLSプロトコルを許可するように設定されている場合、クライアントは警告を発行しません。これには次が含まれます:

  ・MySQLサーバーへの接続にTLSプロトコルを指定するための--tls-versionオプションを
   サポートするクライアントプログラム。

  ・レプリカがソースサーバーへの接続用のTLSプロトコルを指定できるようにする
   ステートメント。(CHANGE REPLICATION SOURCE TOにはSOURCE_TLS_VERSIONオプション
   があり、CHANGE MASTER TOにはMASTER_TLS_VERSIONオプションがあります。)

  ・参加メンバーが分散リカバリ接続用にTLSプロトコルを指定できるようにする
   group_replication_recovery_tls_versionシステム変数。

 (バグ #32565996)

● temptable_use_mmap変数は非推奨になり、今後のMySQLバージョンで削除される可能性があります。

● MySQLでのTLSサポートは、様々なセキュリティ保護可能なポートまたはプロトコルに適用されるTLSパラメータの名前付きセットを使用するチャネルモデルに移行しています。例えば、特定のTLSチャネルの状態を照会するためには、パフォーマンススキーマのtls_channel_statusテーブルを使用します:

    mysql> SELECT VALUE FROM performance_schema.tls_channel_status
           WHERE CHANNEL = 'mysql_main' AND PROPERTY = 'Enabled';
    +-------+
    | VALUE |
    +-------+
    | Yes   |
    +-------+

 これにより、TLSサポート全体に適用されるモノリシックパラメータの適用範囲が狭くなるため、次のオプションとシステム変数は、現在は非推奨になり、今後のMySQLバージョンで削除される可能性があります。

  ・--sslおよび--admin-sslサーバーオプション。

  ・have_sslおよびhave_opensslシステム変数。

 --sslおよび--admin-sslオプションはデフォルトで有効になっているため、通常は指定する必要はありません。これらのオプションを否定形式で指定する代わりに、メインインターフェイスまたは管理インターフェイスの暗号化された接続を無効にしたい場合は、対応するTLSバージョンのシステム変数を空の値に設定して、TLSバージョンがサポートされていないことを示します。例えば、サーバーのmy.cnfファイルのこれらの行は、両方のインターフェイスの暗号化された接続を無効にします:

    [mysqld]
    tls_version=''
    admin_tls_version=''

■ エラー処理

● クライアントタイムアウトのサーバーエラーログに書き込まれる情報には、タイムアウト値(使用可能な場合)、およびクライアントユーザーとホストが含まれるようになりました。(バグ #31581289、バグ #100112)

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

● イベントスケジューラが有効になっている場合、super_read_onlyシステム変数を有効にすると、イベントデータディクショナリテーブル内のイベントの“last executed”タイムスタンプが更新されなくなります。これにより、サーバーエラーログにメッセージを書き込んだ後、次にスケジュールされたイベントを実行しようとした時に、イベントスケジューラが停止します。

 以前は、super_read_onlyを有効にするとイベントスケジューラが停止した場合、それからsuper_read_onlyを無効にした後、イベントスケジューラを再度有効にすることにより手動で再起動する必要がありました。便宜上、super_read_onlyが無効になっている場合、サーバーは必要に応じてイベントスケジューラを自動的に再起動するようになりました。(バグ #31633859)

■ ファイアウォール関連

● MySQL 8.0.23では、MySQL Enterprise Firewallは、それぞれが単一のアカウントに適用される以前実装されたアカウントプロファイルに加えて、それぞれが複数のアカウントに適用できるグループプロファイルを実装しました。

 単一のメンバーアカウントを持つグループプロファイルは、そのアカウントのアカウントプロファイルと論理的に同等であるため、アカウントプロファイルとグループプロファイルを組み合わせて使用するのではなく、グループプロファイルのみを使用してファイアウォールを管理できます。新しいファイアウォールのインストールの場合、それは、新しいプロファイルをグループプロファイルとして一律に作成し、アカウントプロファイルを回避することによって実現されます。既にアカウントプロファイルが含まれているファイアウォールインストールからのアップグレードの場合、MySQL Enterprise Firewallには、現在は、アカウントプロファイルをグループプロファイルに変換するためのsp_migrate_firewall_user_to_group()という名前のストアドプロシージャが含まれています。

 グループプロファイルによって提供される柔軟性が向上したため、アカウントプロファイルに関連するファイアウォールの全ての側面が非推奨になり、今後のMySQLバージョンで削除される可能性があります。

  ・INFORMATION_SCHEMAテーブル:MYSQL_FIREWALL_USERS、MYSQL_FIREWALL_WHITELIST

  ・mysqlシステムスキーマテーブル:firewall_users、firewall_whitelist

  ・mysqlシステムスキーマのストアドプロシージャ:sp_reload_firewall_rules()、sp_set_firewall_mode()

  ・ロード可能な関数:read_firewall_users()、read_firewall_whitelist()、set_firewall_mode()

 さらに、サーバーが起動時にアカウントプロファイルを検出すると、正常にロードされたアカウントプロファイルごとに警告を書き込みます。

■ パッケージ関連

● システムcurlライブラリにリンクするのではなくcurlを含むバイナリパッケージが、curl 7.77.0を使用するようにアップグレードされました。(バグ #33077562)

● Ubuntuパッケージの場合、mysqldのAppArmorプロファイルは、PIDとソケットファイル名に関して制限が厳しく、プロファイルで正確な名前を使用していないサーバーでは失敗しました。現在は、プロファイルはファイルが存在するディレクトリに適用され、様々なファイル名や複数のサーバーに適用できるようになります。(バグ #32857611)

● dh-systemdパッケージはUbuntu 21.04から削除されたため、dh-systemdパッケージへの依存関係はそのディストリビューション用にビルドされたMySQLパッケージから削除されました。(バグ #32688072)

● Debianパッケージの場合、EnvironmentFileディレクティブが追加され、systemdサービスは/etc/default/mysqlファイルが存在する場合にそのファイルから環境変数を読み取ることができるようになりました。(バグ #32082863、バグ #101363)

● Debianパッケージは、パス名に/var/runではなく/runを使用するようになりました。(バグ #31955638)

● バンドルされているlz4ライブラリは、バージョン 1.9.3にアップグレードされました。(バグ #29747853)

● Debianパッケージの場合、MySQL設定ファイルのupdate-alternatives優先度が引き上げられ、それが以前インストールされたディストリビューションからの既存のファイルを確実に置き換えるようになりました。(バグ #29606955)

■ プラガブル認証

● Linux:MySQL Enterprise Editionは、適切なKerberosチケットが利用可能であるか取得できる場合に、ユーザーがKerberosを使用してMySQLサーバーに対して認証できるようにする認証方法をサポートするようになりました。

 この認証方法では、サーバー側でauthentication_kerberos、クライアント側でauthentication_kerberos_clientのプラグインのペアを使用します。Linuxを実行しているMySQLサーバーとクライアントホストでのみ使用できますが、Linux以外のホストで実行されているKerberosサービスにアクセスできます。

■ サーバー管理関連

● innodb_strict_modeシステム変数のセッション値の設定は制限された操作になり、セッションユーザーは制限されたセッション変数を設定するのに十分な権限を持っている必要があります。

 (バグ #32944980)

■ 空間データサポート

● ST_Buffer()関数は、ジオメトリがポイント値である場合に、ジオメトリ引数が地理空間参照系(SRS)を持つことを許可するようになりました。以前は、ST_Buffer()はデカルトSRSのジオメトリ引数のみをサポートしていました。ST_Difference()およびST_Union()関数では、ジオメトリ引数が地理的SRSを持つことができるようになりました。以前は、ST_Difference()およびST_Union()は、デカルトSRSのジオメトリ引数のみをサポートしていました。

■ Xプラグイン関連

● X DevAPI Session.run_sql()メソッドを使用して複数の結果を返すクエリを実行した場合、キャッシュの問題により、result.column_namesプロパティは更新されましたが、result.columnsプロパティは、アクティブな結果に存在する列を反映するように更新されませんでした。(バグ #32887586)

● アップグレードプロセス中に、Xプラグインは、TCPポートとUNIXソケットが割り当てられると接続の準備ができたことを示すメッセージをログに記録しました。ただし、アップグレードプロセスが完了するまで、接続は実際には受け入れられませんでした。このメッセージは、アップグレードが完了した後にのみ発行されるようになりました。(バグ #32814997)

■ 追加・変更された機能

● 互換性のない変更:MySQL 8.0.26から、“source”に変更された“master”、“replica”に変更された“slave”、(“multithreaded applier”の)“mta”に変更された(“multithreaded slave”の)“mts”という用語を含む残っている識別子のほとんどに、新しいエイリアスまたは置換名が提供されます。該当するヘルプテキストも新しい名前を使用するように変更されます。

 次の名前の置き換えは、パフォーマンススキーマテーブル、プロセスリスト、およびレプリカステータス情報で見られます。これらの変更は、以前のリリースと互換性がありません。これらのインストルメンテーション名で機能する監視ツールは影響を受ける可能性があります:

  ・インストルメント化されたロック(ミューテックス)。接頭辞wait/synch/mutex/が付いたmutex_instancesおよびevents_waits_*パフォーマンススキーマテーブルで見られます。

  ・読み取り/書き込みロック。接頭辞wait/synch/rwlock/が付いたrwlock_instancesおよびevents_waits_*パフォーマンススキーマテーブルで見られます。

  ・インストルメント化された条件変数。接頭辞wait/synch/cond/が付いたcond_instancesおよびevents_waits_*パフォーマンススキーマテーブルで見られます。

  ・インストルメント化されたメモリ割り当て。接頭辞memory/sql/が付いたmemory_summary_*パフォーマンススキーマテーブルで見られます。

  ・スレッド名。接頭辞thread/sql/が付いたスレッドパフォーマンススキーマテーブルで見られます。

  ・スレッドステージ。スレッドおよびプロセスリストのパフォーマンススキーマテーブルの接頭辞、SHOW PROCESSLISTステートメントからの出力、情報スキーマプロセスリストテーブル、およびスロークエリログがない、接頭辞stage/sql/が付いたevents_stages_*パフォーマンススキーマテーブルに見られます。

  ・スレッドコマンド。スレッドおよびプロセスリストのパフォーマンススキーマテーブルの接頭辞、SHOW PROCESSLISTステートメントからの出力、情報スキーマプロセスリストテーブル、およびSHOW REPLICA STATUSステートメントからの出力がない、接頭辞statement/com/が付いたevents_statements_history*およびevents_statements_summary_*_by_event_nameパフォーマンススキーマテーブルで見られます。

 この互換性のない変更が影響を与える場合は、新しいシステム変数terminology_use_previousをBEFORE_8_0_26に設定して、MySQL Serverに前のリストで指定されたオブジェクトの古いバージョンの名前を使用させることができます。これにより、古い名前に依存する監視ツールは、新しい名前を使用するように更新できるまで機能し続けることができます。そのシステム変数は、個々の機能をサポートするためにセッションスコープで設定することもでき、全ての新しいセッションのデフォルトとしてグローバルスコープで設定することもできます。グローバルスコープが使用される場合、スロークエリログには古いバージョンの名前が含まれます。

 準同期レプリケーションの場合、システム変数とステータス変数の新しいバージョンと古いバージョンのどちらを使用するかを選択できます。準同期レプリケーションを実装するプラグインの新しいバージョン(ソースサーバー用とレプリカ用)が提供されており、masterとslaveという用語がsourceとreplicaに置き換えられています。古いバージョンの代わりにこれらのバージョンをインストールできます:

  ・ソースのrpl_semi_sync_masterプラグイン(semisync_master.soライブラリ)には、新しいバージョンのrpl_semi_sync_source(semisync_source.soライブラリ)があります。

  ・レプリカのrpl_semi_sync_slaveプラグイン(semisync_slave.soライブラリ)には、新しいバージョンのrpl_semi_sync_replica(semisync_replica.soライブラリ)があります。

 関連するプラグインの新しいバージョンと古いバージョンの両方をインスタンスにインストールすることはできません。新しいバージョンのプラグインを使用する場合、新しいシステム変数とステータス変数は使用できますが、古いものは使用できません。古いバージョンのプラグインを使用する場合、古いシステム変数とステータス変数は使用できますが、新しいものは使用できません。

 次の内部使用項目は、新しい用語を使用するように変換されますが、ユーザーや監視ツールに外部化されることはなく、MySQL Serverは必要な解決を内部で処理します:

  ・ソースコードのC++ファイル名

  ・C++ファイルのヘッダーガード

  ・デバッグシンボル

  ・レプリカがレプリケーションソースサーバーに接続する時(レプリカは古い名前と新しい名前の両方を設定する)、レプリカによってレプリケーションプロトコルハンドシェイクで渡されるユーザー変数

 次のカテゴリの識別子は新しいエイリアスを持ち、古い名前は引き続き機能しますが、古い名前が使用されると非推奨の警告が発行されます。どちらの名前もパフォーマンススキーマテーブルとステータス表示で使用可能で、これらを読み取る時に非推奨の警告は発行されません。新しいエイリアスは、新しいシステム変数terminology_use_previousの影響を受けず、次のように設定される場合でも使用できます。

  ・“master”、“slave”、または“mts”という用語を含むシステム変数。ただし、既に非推奨になっているもの、または非推奨になる予定のもの、およびNDBによって定義されているものは除きます。これらのシステム変数がSET PERSISTステートメントを使用して永続化される場合、古い名前と新しい名前の両方が、ステートメントでどちらが指定されたかに関係なく、永続化されます。RESET PERSISTステートメントを使用すると、両方がリセットされます。

  ・“master”、“slave”、または“mts”という用語を含むステータス変数。ただし、NDBで定義されているものを除きます。

  ・“master”、“slave”、または“mts”という用語を含むmysqldのコマンドラインオプション。ただし、既に非推奨になっているもの、または非推奨になる予定のもの、およびNDBによって定義されているものは除きます。

  ・“master”、“slave”、または“mts”という用語を含むmysqladminのコマンドラインオプション。

  ・“master”、“slave”、または“mts”という用語を含むmysqlbinlogのコマンドラインオプション。

  ・“master”、“slave”、または“mts”という用語を含むmysqldumpのコマンドラインオプション。

  ・“master”という用語を含むSQL関数。

 新しいエイリアス(または準同期レプリケーションの場合は置き換え)を持つ識別子の完全なリストは次のとおりです:

  ・システム変数:

    ・master_verify_checksumのエイリアスはsource_verify_checksum

    ・sync_master_infoのエイリアスはsync_source_info

    ・init_slaveのエイリアスはinit_replica

    ・rpl_stop_slave_timeoutのエイリアスはrpl_stop_replica_timeout

    ・log_slow_slave_statementsのエイリアスはlog_slow_replica_statements

    ・slave_max_allowed_packetのエイリアスはreplica_max_allowed_packet

    ・slave_compressed_protocolのエイリアスはreplica_compressed_protocol

    ・slave_exec_modeのエイリアスはreplica_exec_mode

    ・slave_type_conversionsのエイリアスはreplica_type_conversions

    ・slave_sql_verify_checksumのエイリアスはreplica_sql_verify_checksum

    ・slave_parallel_typeのエイリアスはreplica_parallel_type

    ・slave_preserve_commit_orderのエイリアスはreplica_preserve_commit_order

    ・log_slave_updatesのエイリアスはlog_replica_updates

    ・slave_allow_batchingのエイリアスはreplica_allow_batching

    ・slave_load_tmpdirのエイリアスはreplica_load_tmpdir

    ・slave_net_timeoutのエイリアスはreplica_net_timeout

    ・sql_slave_skip_counterのエイリアスはsql_replica_skip_counter

    ・slave_skip_errorsのエイリアスはreplica_skip_errors

    ・slave_checkpoint_periodのエイリアスはreplica_checkpoint_period

    ・slave_checkpoint_groupのエイリアスはreplica_checkpoint_group

    ・slave_transaction_retriesのエイリアスはreplica_transaction_retries

    ・slave_parallel_workersのエイリアスはreplica_parallel_workers

    ・slave_pending_jobs_size_maxのエイリアスはreplica_pending_jobs_size_max

    ・pseudo_slave_modeのエイリアスはpseudo_replica_mode

    ・skip_slave_startのエイリアスはskip_replica_start

  ・新しいrpl_semi_sync_sourceおよびrpl_semi_sync_replicaプラグインが
   準同期レプリケーションに使用される場合:

    ・rpl_semi_sync_slave_enabledはrpl_semi_sync_replica_enabledに置き換えられる

    ・rpl_semi_sync_slave_trace_levelはrpl_semi_sync_replica_trace_levelに
     置き換えられる

    ・rpl_semi_sync_master_wait_for_slave_countは
     rpl_semi_sync_source_wait_for_replica_countに置き換えられる

    ・rpl_semi_sync_master_enabledはrpl_semi_sync_source_enabledに置き換えられる

    ・rpl_semi_sync_master_timeoutはrpl_semi_sync_source_timeoutに置き換えられる

    ・rpl_semi_sync_master_trace_levelはrpl_semi_sync_source_trace_levelに
     置き換えられる

    ・rpl_semi_sync_master_wait_pointはrpl_semi_sync_source_wait_pointに
     置き換えられる

  ・次のシステム変数は変更されません:

    ・ndb_slave_conflict_role(NDBシステム変数は変更されません)

    ・binlog_rotate_encryption_master_key_at_startup
     (“master key”は受け入れられる用語です)

    ・slave_rows_search_algorithms(このシステム変数は既に非推奨です)

    ・master_info_repository(このシステム変数は既に非推奨です)

  ・ステータス変数:

    ・Slave_open_temp_tablesのエイリアスはReplica_open_temp_tables

    ・Slave_rows_last_search_algorithm_usedのエイリアスは
     Replica_rows_last_search_algorithm_used

  ・新しいrpl_semi_sync_sourceおよびrpl_semi_sync_replicaプラグインが
   準同期レプリケーションに使用される場合:

    ・Rpl_semi_sync_slave_statusはRpl_semi_sync_replica_statusに置き換えられる

    ・Rpl_semi_sync_master_statusはRpl_semi_sync_source_statusに置き換えられる

    ・Rpl_semi_sync_master_clientsはRpl_semi_sync_source_clientsに置き換えられる

    ・Rpl_semi_sync_master_yes_txはRpl_semi_sync_source_yes_txに置き換えられる

    ・Rpl_semi_sync_master_no_txはRpl_semi_sync_source_no_txに置き換えられる

    ・Rpl_semi_sync_master_wait_sessionsはRpl_semi_sync_source_wait_sessionsに
     置き換えられる

    ・Rpl_semi_sync_master_no_timesはRpl_semi_sync_source_no_timesに置き換えられる

    ・Rpl_semi_sync_master_timefunc_failuresは
     Rpl_semi_sync_source_timefunc_failuresに置き換えられる

    ・Rpl_semi_sync_master_wait_pos_backtraverseは
     Rpl_semi_sync_source_wait_pos_backtraverseに置き換えられる

    ・Rpl_semi_sync_master_tx_wait_timeはRpl_semi_sync_source_tx_wait_timeに
     置き換えられる

    ・Rpl_semi_sync_master_tx_waitsはRpl_semi_sync_source_tx_waitsに置き換えられる

    ・Rpl_semi_sync_master_tx_avg_wait_timeはRpl_semi_sync_source_tx_avg_wait_time
     に置き換えられる

    ・Rpl_semi_sync_master_net_wait_timeはRpl_semi_sync_source_net_wait_timeに
     置き換えられる

    ・Rpl_semi_sync_master_net_waitsはRpl_semi_sync_source_net_waitsに置き換えられる

    ・Rpl_semi_sync_master_net_avg_wait_timeは
     Rpl_semi_sync_source_net_avg_wait_timeに置き換えられる

  ・NDB関連のステータス変数は変更されません。

  ・mysqldの場合、上記の一覧にある全てのエイリアスおよび置換されるシステム変数の
   コマンドラインバージョンには、同等のコマンドラインエイリアスまたは置き換えに加えて、
   システム変数ではない次のコマンドラインオプションがあります:

    ・show-slave-auth-infoのエイリアスはshow-replica-auth-info

  ・次のコマンドラインオプションは変更されません:

    ・abort-slave-event-count(このコマンドラインオプションは非推奨になる予定です)

    ・disconnect-slave-event-count(このコマンドラインオプションは非推奨になる
     予定です)

    ・master-info-file(このコマンドラインオプションは既に非推奨です)

    ・master-retry-count(このコマンドラインオプションは既に非推奨です)

  ・mysqladminの場合、オプションstart-slaveのエイリアスはstart-replicaで、
   オプションstop-slaveのエイリアスはstop-replicaです。

  ・mysqlbinlogの場合、オプションread-from-remote-masterのエイリアスは
   read-from-remote-sourceです。

  ・mysqldumpの場合、次のコマンドラインオプションに新しいエイリアスがあります:

    ・apply-slave-statementsのエイリアスはapply-replica-statements

    ・delete-master-logsのエイリアスはdelete-source-logs

    ・dump-slaveのエイリアスはdump-replica

    ・include-master-host-portのエイリアスはinclude-source-host-port

    ・master-dataのエイリアスはsource-data

  ・組み込みのSQL関数MASTER_POS_WAITには、新しいエイリアスSOURCE_POS_WAITがあります。

● InnoDB:新しいinnodb_segment_reserve_factorシステム変数を使用すると、空のページとして予約されているテーブルスペースファイルセグメントページの割合を設定できます。

 (バグ #32312743、バグ #102044)

● BoostをダウンロードするためのURLが更新されました。(バグ #32856104、バグ #103611)

● これらのステートメントは、文字セット名を書く時にutf8ではなくutf8mb3を報告するようになりました:EXPLAIN、SHOW CREATE PROCEDURE、SHOW CREATE EVENT。

 データディクショナリから取得されたストアドプログラム定義は、文字セット参照でutf8ではなくutf8mb3を報告するようになりました。これは、SHOW CREATEステートメントなど、これらの定義から生成される全ての出力に影響します。

 このエラーメッセージは、文字セット名ER_INVALID_CHARACTER_STRINGを書き込む時に、utf8ではなくutf8mb3を報告するようになりました。(バグ #32233614、バグ #32392077、バグ #32392209、バグ #32428538、バグ #32428598)

● グループレプリケーションの場合、シングルプライマリモードのグループは、スーパー読み取り専用モードを維持するように設定できるようになったので、レプリケートされたトランザクションのみを受け入れ、クライアントからの直接書き込みを受け入れなくなりました。この設定は、グループの目的が災害耐性のために別のグループにセカンダリバックアップを提供することである場合に、セカンダリグループが最初のグループと同期されたままであることを保証できることを意味します。プライマリでそのモードを削除するために通常行われるアクションを無効にすることにより、新しいプライマリが選択された時にスーパー読み取り専用モードを維持するようにグループを設定できます。

 管理者は、新しいグループレプリケーション関数のgroup_replication_enable_member_actionおよびgroup_replication_disable_member_actionを使用して、この方法でグループを設定できます。これらの関数は、グループのメンバーが指定された状況で実行するアクションを有効または無効にできます。この関数は、グループレプリケーションプラグインがインストールされている限り、グループの一部ではないサーバーでも使用できます。メンバーアクションはプライマリで設定され、グループメッセージを使用して他のグループメンバーおよび参加メンバーに伝播されます。別の関数のgroup_replication_reset_member_actionsを使用すると、メンバーアクション設定を全てのメンバーアクションのデフォルト設定にリセットできます。

● システム変数のtransaction_write_set_extractionは非推奨になり、それの設定またはその値の読み取りを試みると警告メッセージが発行されます。このシステム変数は、今後のMySQLバージョンで削除される予定です。このシステム変数は、マルチスレッドレプリカを持つレプリケーションソースサーバーで使用され、トランザクションの書き込みセット用に抽出された書き込みをハッシュするために使用されるアルゴリズムを指定しました。MySQL 8.0のデフォルトであり、グループレプリケーションに必要なXXHASH64アルゴリズムは、このシステム変数が使用されていない場合に選択されます。

● ビュー変更のためにグループレプリケーションの内部で生成されたトランザクション(View_change_log_event)がバイナリログに書き込まれる時に使用されるGTIDの一部を形成するために、代替UUIDを選択できるようになりました。新しいグループレプリケーションシステム変数のgroup_replication_view_change_uuidは、グループ名(group_replication_group_nameシステム変数の値)の代わりに使用されるUUIDを指定します。代替UUIDを使用すると、ビュー変更イベントと、グループがクライアントから受信するトランザクションを簡単に区別できます。これは、セットアップによりグループ間のフェイルオーバーが可能になり、バックアップグループに固有のトランザクションを識別して破棄する必要がある場合に役立ちます。グループの全てのメンバーに同じ代替UUIDを指定する必要があるため、この方法で設定されたグループには、MySQL 8.0.26より前のリリースのメンバーを含めることはできないことに注意してください。

● fdatasync()システムコールをサポートするプラットフォームでは、新しいinnodb_use_fdatasync変数により、オペレーティングシステムのフラッシュのためにfsync()の代わりにfdatasync()を使用できます。fdatasync()システムコールは、後続のデータ取得に必要な場合を除いて、ファイルメタデータへの変更をフラッシュしないため、パフォーマンスが向上する可能性があります。innodb_use_fdatasync変数は、SETステートメントを使用して動的に設定できます。

■ 主なバグ修正

● 互換性のない変更:トリガー本体内で、割り当てターゲットとしてOLD値またはNEW値を使用するSET句を含むINSERTまたはUPDATEステートメントは、アサーションを発生させたり、サーバーの終了につながる可能性がありました。このような割り当ては許可されなくなりました。(バグ #32803211)

● パフォーマンス:列間で値をコピーするために使用される内部関数が改善され、値が類似したタイプの場合に不要な計算が実行されなくなりました。この機能拡張により、一時テーブルを使用したクエリが大幅に高速化されます。内部テストでは、このようなクエリが以前よりも最大11%高速に実行されることが示されています。いつものことですが、環境、設定、およびその他の要因によって、結果はこれらと異なる場合があります。(バグ #32742537)

● InnoDB:エラーログ内の不要な警告メッセージの数を減らすために、InnoDBソースのfil_space_acquire()関数のインスタンスは、可能な場合はfil_space_acquire_silent()関数に置き換えられました。(バグ #32944543)

● InnoDB:InnoDBソースのTRX_FORCE_ROLLBACK_ASYNCフラグは、トランザクションが非同期でロールバックされたか、所有スレッドによってロールバックされたかを示しますが、冗長であることが判明し、削除されました。(バグ #32912595)

● InnoDB:InnoDBソースでUT_DELETEマクロの代わりにut_deleteシンボルを使用すると、パフォーマンススキーマのメモリトレースを無効にする(-DDISABLE_PSI_MEMORY=ON)ビルドでエラーが発生しました。(バグ #32910699)

● InnoDB:InnoDBソースのディクショナリシステムmutex_enter呼び出しとmutex_exit呼び出しは、それぞれdict_sys_mutex_enter()とdict_sys_mutex_exit()に名前が変更されました。(バグ #32907980)

● InnoDB:レガシーUNIV_INLINEおよびUNIV_MATERIALIZEアーティファクトがInnoDBソースから削除されました。UNIV_HOTBACKUPが、一部のヘッダーファイルのメソッド宣言に追加されました。(バグ #32894165)

● InnoDB:lock_sysシャーディングされたrw_lockインデックスは、ut_rnd_interval()関数によって生成されたランダムなインデックス値を使用しましたが、これは同時実行性の低いワークロードには最適ではありませんでした。(バグ #32880577)

● InnoDB:innodb_redo_log_encrypt変数の文字列値設定が適切に処理されませんでした。(バグ #32851525)

● InnoDB:トランザクションセットの挿入と削除によって引き起こされるトランザクションシステムのミューテックス(trx_sys->mutex)の競合を軽減するために、それぞれ専用のミューテックスを持つ読み取り/書き込みトランザクションセット(trx_sys->rw_trx_set)シャードが導入されました。関連する機能強化には、
トランザクションセット修飾子を重要度の低い場所に移動すること、
TrxUndoRsegsコンストラクター内のヒープ割り当ての排除、
トランザクション状態(trx->state)およびトランザクション開始時間(trx->start_time)フィールドのstd::atomicフィールドへの変換、
トランザクションを操作するスレッドを検証するための新しいアサーションコードが含まれます。(バグ #32832196)

● InnoDB:InnoDB memcached GETコマンドのレコードバッファーロジックが改訂されました。(バグ #32828352)

● InnoDB:InnoDBソースのut_listベースメンバーは、実行時にリストのベースノードにメンバーポインターを格納する(これはリソースを浪費しました)のではなく、リストタイプの要素部分を使用してリストノードを検索するようになりました。このパッチには、他のut_list関連のコードの改善も含まれています。(バグ #32820458)

● InnoDB:UNDOテーブルスペースの切り捨て操作が開始された後、UNDOログページとロールバックセグメントページを含むユーザースレッドとパージスレッドの間のデッドロックが発生しました。デッドロックにより、セマフォの待機時間が長くなり、最終的にエラーが発生しました。(バグ #32800020)

● InnoDB:PSI_memory_key識別子のタイプセーフな拡張機能が導入されました。PSI_memory_key識別子は、メモリ操作のインストゥルメンテーションのためにパフォーマンススキーマによって使用されます。この機能拡張により、ut::aligned_nameライブラリ関数はコンパイル時にタイプエラーを報告できるようになりました。(バグ #32797838)

● InnoDB:buf_get_LRU_mutex()関数は、フラッシュリストからフラッシュする時にLRUミューテックスを不必要に取得しないように最適化されました。(バグ #32797451、バグ #103391)

● InnoDB:デバッグビルドで、Fil_shard::m_deleted_spaces(削除されたテーブルスペースベクター)へのアクセスがFil_shardミューテックスによって保護されていなかったため、失敗しました。(バグ #32792816)

● InnoDB:2GBのRAMを搭載したマシンでinnodb_dedicated_serverを有効にすると、単一のREDOログファイルが作成され、起動エラーが発生しました。innodb_dedicated_server自動設定ロジックが改訂され、少なくとも2つのログファイルが作成されるようになりました。

 (バグ #32788772、バグ #103372)

● InnoDB:テーブルに多過ぎる列が追加され、列の制限を超えた操作の後、パーティション化されたテーブルを切り捨てる時にエラーが発生しました。追加された列の数は、ADD COLUMN操作が許可される前に評価されるようになりました。(バグ #32788564、バグ #103363)

● InnoDB:ディスクがほぼいっぱいになるパンチホールをサポートするプラットフォームでは、大きなAUTOEXTEND_SIZE設定のテーブルスペースを作成すると、デバイスエラー時にスペースがなくなり、それに続いてInnoDBリカバリエラーが発生する可能性がありました。(バグ #32771235)

● InnoDB:トランザクションロックリスト(trx->lock.trx_locks)のサブセットである、トランザクションによって要求されたテーブルロックのリスト(trx->lock.table_locks)が削除されました。トランザクションによって要求されたテーブルロックは、代わりにトランザクションロックリストの先頭に表示されるようになりました。(バグ #32762881)

● InnoDB:ディスクがほぼいっぱいになりリカバリ中に障害が発生し、データが不整合な状態のままになりました。この障害は、テーブルスペース拡張操作をやり直すために使用されるfil_tablespace_redo_extend()関数で発生しました。(バグ #32749974、バグ #32748733)

● InnoDB:file-per-tableのテーブルスペースをオフラインで再配置し、innodb_directoriesオプションを使用して新しい場所をInnoDBに認識させた後、COPYアルゴリズムを使用したALTER TABLE操作がストレージエンジンエラーで失敗しました。この失敗は、新しいディレクトリの場所ではなくデータディレクトリを検索した名前変更チェックが原因でした。(バグ #32721533)

● InnoDB:C++標準テンプレートライブラリ(STL)でのut_allocator()コンプライアンスの問題が解決されました。(バグ #32715698)

● InnoDB:InnoDBソースのstd::vectorによってインスタンス化されたut_allocator::allocate()のインスタンスは、std::vectorによって暗黙的に実行されたメモリ割り当てと割り当て解除のトレースに失敗しました。同じ問題が、他のC++標準テンプレートライブラリ(STL)およびSTLのようなデータ構造でも見つかりました。(バグ #32715688)

● InnoDB:C++11より前のスタイルで実装されたカスタムインターフェイスであるInnoDBソースのut_allocator::construct()インターフェイスは、不要なオーバーヘッドを引き起こしました。このインターフェイスは不要であったので、削除されました。(バグ #32715381)

● InnoDB:InnoDBソースのut_list lengthメンバー変数は、未定義の動作なしでロックフリーアクセスを許可するためにアトミックフィールドに置き換えられました。デフォルトのut_listコンストラクターは、全てのリストの初期化を実行する新しいコンストラクターに置き換えられました。(バグ #32715371)

● InnoDB:InnoDBソースのut_allocator()メモリ不足レポートメカニズムは信頼できず、削除されました。(バグ #32715359)

● InnoDB:パフォーマンススキーマメタデータの暗黙的な処理が、InnoDBソースのut_allocator::allocate_large()関数およびut_allocator::deallocate_large()関数に実装されました。この変更により、パフォーマンススキーマのメタデータ処理が同様の割り当て関数の処理と一致します。(バグ #32714144)

● InnoDB:ストールは、並列読み取りスレッドの数がマシンコアの数を超えた並列SELECT COUNT(*)クエリによって発生しました。この問題のパッチは、MySQL 8.0.24のWindowsビルド用に提供されました。MySQL 8.0.26のパッチは、影響を受ける他のプラットフォームでの同じ問題に対処します。(バグ #32678019)

 参照:バグ #32224707。

● InnoDB:レコード内の各フィールドのオフセットを決定するrec_get_offsets()関数へのコストのかかる呼び出しを回避するために、オフセットのキャッシュは、固定長、仮想列なし、インスタント列などの特定の要件を満たすインデックスに拡張されます。(バグ #32673649)

● InnoDB:MySQL Enterprise Backupによって復元されたデータディレクトリでサーバーを起動すると、次のサーバー再起動まで、doublewriteバッファ(innodb_doublewrite変数によって制御される)は無効のままでした。(バグ #32642866)

● InnoDB:多数のテーブルを作成すると、「開いているファイルが多すぎる」というエラーが発生しました。(バグ #32634620)

 参照:この問題は、バグ #32541241のリグレッションです。

● InnoDB:ページ追跡システムのリカバリ障害が原因でInnoDBリカバリが続行できませんでした。これは、非ブロッキングであるはずでした。(バグ #32630875)

● InnoDB:整数アンダーフローの問題がInnoDB mecachedプラグインソースで解決されました。(バグ #32620378、バグ #32620398)

● InnoDB:トランザクションがロックの待機を開始すると、InnoDBロックシステムは現在ロックを保持しているトランザクションに関する情報をサーバーに提供しましたが、ロックを解放して別の待機中のトランザクションにそれをグレーティングした後はサーバーに通知できませんでした。その結果、レプリケーションアプライヤースレッドコーディネーターは、このシナリオの3番目のトランザクションが最初の待機トランザクションの後にコミットされた場合に発生する可能性がある意図されたトランザクションコミット順序の潜在的なデッドロックを検出できませんでした。(バグ #32618301)

● InnoDB:レコードを一意のセカンダリインデックスに挿入する時に、同時トランザクションが影響を受ける範囲に競合するレコードを挿入しないようにするために取得されたインデックスレコードロックには、その範囲の後の最初のレコードに不要なギャップロックが含まれていました。(バグ #32617942)

● InnoDB:動的に割り当てられたオーバーアラインされたタイプを作成するInnoDBコードは、ut::aligned_nameライブラリ関数に置き換えられました。(バグ #32601599)

● InnoDB:オーバーアラインされたタイプの動的ストレージを処理するAPIに属するメモリ割り当て関数(ut::aligned_nameライブラリ関数)が拡張され、パフォーマンススキーマを使用するメモリトレースをサポートするようになりました。HAVE_PSI_MEMORY_INTERFACEソース設定オプションは、メモリトレースモジュールを有効にします。

 ゼロで初期化されたメモリ割り当てのサポートを提供するaligned_zalloc()ライブラリ関数がAPIに追加されました。(バグ #32600981)

 参照:バグ #32601599、バグ #32246061、バグ #32246200。

● InnoDB:ヒストグラム統計を生成する目的のInnoDBデータのサンプリングが、InnoDBでサポートされている全てのトランザクション分離レベルでサポートされるようになりました。以前は、サンプリングはREAD UNCOMMITTED分離レベルのみを使用して実行されていました。(バグ #32555575)

● InnoDB:767バイトを超えるキープレフィックス長のインデックスが、REDUNDANT行フォーマットで定義されたテーブルで許可され、その行フォーマットのインデックスキープレフィックス長の制限を超えました。インデックスを追加したALTER TABLE操作は、テーブルの実際の行フォーマットではなく、innodb_default_row_format変数によって定義された行フォーマットのインデックスキープレフィックス長を検証しました。この修正により、インデックスキープレフィックス長が正しい行フォーマットで検証されるようになります。(バグ #32507117、バグ #102597)

● InnoDB:アダプティブハッシュインデックスラッチは、意味のあるラッチ位置情報を提供しませんでした。(バグ #32477773)

● InnoDB:サーバーの初期化時のREDOおよびUNDOログ暗号化に関連する依存関係が削除されました。(バグ #32476724)

● InnoDB:オンラインバッファープールのサイズ変更操作により、前のバッファープールページハッシュが解放され、前のページハッシュを必要とする同時バッファプールルックアップと競合しました。(バグ #32460315)

● InnoDB:TempTableストレージエンジン(internal_tmp_mem_storage_engine=TempTable)を使用している場合、SELECTリスト内の255を超える集計関数により、インデックス付きの列フィールドの位置を格納する内部変数のオーバーフローが原因でエラーが発生しました。(バグ #32458104、バグ #102468)

● InnoDB:大きなバッファプールを持つインスタンスでUNDOテーブルスペースの取り消し操作を実行中にワークロードが停止しました。マークされたUNDOテーブルスペースを切り捨てる関数は、排他ラッチではなく共有ラッチを使用するようになり、共有ラッチの使用時間が短縮されました。(バグ #32353863、バグ #102143)

● InnoDB:オーバーアラインされたタイプの動的ストレージを処理するためのプログラミングインターフェイスが追加されました。(バグ #32246200、バグ #32246061)

● InnoDB:特定の状況下では、InnoDBのリカバリ中に障害が発生すると、コミットされた変更が失われる可能性がありました。リカバリ中に許可されたチェックポイントは、適切なチェックポイント操作に必要なページフラッシュ、フラッシュリストのメンテナンス、またはデータディクショナリテーブルバッファへの永続的な変更を処理しませんでした。したがって、REDOログのリカバリが完了し、データディクショナリの動的メタデータ(srv_dict_metadata)がデータディクショナリテーブル(dict_table_t)オブジェクトに転送されるまで、チェックポイントとそのチェックポイントのLSNの進行は許可されなくなります。この変更の結果として、リカバリ中またはリカバリ後(ただし、データディクショナリの動的メタデータがデータディクショナリテーブルオブジェクトに転送される前)にREDOログのスペースが不足した場合、少なくともSRV_FORCE_NO_IBUF_MERGE設定、または失敗した場合はSRV_FORCE_NO_LOG_REDO設定から開始して、innodb_force_recoveryの再起動が必要になる場合があります。このシナリオでinnodb_force_recoveryの再起動が失敗した場合、バックアップからのリカバリが必要になることがあります。(バグ #32200595)

● InnoDB:ロールバックセグメントは起動中に並行して初期化されるようになりました。以前は、ロールバックセグメントは順次に初期化されていました。(バグ #32170127、バグ #101658)

● InnoDB:innodb_log_writer_threads変数設定のテスト中に障害が発生しました。その障害は競合状態が原因でした。(バグ #32129814)

 参照:この問題は、バグ #30088404のリグレッションです。

● InnoDB:UNDOテーブルスペースを切り捨てていたパージスレッドとINFORMATION_SCHEMA.FILESテーブルに問い合わせを行ったサーバースレッドの間で競合状態が発生しました。その結果、切り捨てられたUNDOテーブルスペースは、問い合わせが行われた時にINFORMATION_SCHEMA.FILESテーブルに表示されませんでした。これにより、UNDOテーブルスペースファイルの場所がINFORMATION_SCHEMA.FILESテーブルに依存しているため、MySQL Enterprise Backupが失敗しました。(バグ #32104924、バグ #32654667)

● InnoDB:DML操作が単一のテーブルに集中している場合、パージ作業は単一のパージスレッドによって実行されました。これにより、DML操作に大きなオブジェクト値が含まれる場合、パージ操作が遅くなり、パージラグが増加し、テーブルスペースファイルサイズが増加する可能性がありました。この問題に対処するために、パージラグがinnodb_max_purge_lag設定を超えた時、パージ作業が使用可能なパージスレッド間で自動的に再分散されるようになりました。(バグ #32089028)

● InnoDB:INFORMATION_SCHEMA.INNODB_TABLESPACESテーブルにデータを取り込む関数は、ファイルのスペースにアクセスし、保護されていないstat()操作とファイルサイズ情報の取得を実行しました。(バグ #32025344)

● InnoDB:InnoDBソースのtrx_t::is_recoveredフラグに関連するコードが、複雑さと正確さの様々な問題に対処するために改訂されました。対処された問題の1つにより、XAトランザクションが“recovered”として誤って記述されていました。これは、クライアントセッションがXA PREPAREの後にXAトランザクションから切断された時に発生しました。(バグ #31870582)

● InnoDB:Indexed_cellsメンバー関数(cell_from_mysql_buf_index_read())のTempTableデバッグアサーションコードは、長さがゼロでnull不可の列を考慮しませんでした。(バグ #31091089)

● InnoDB:InnoDB memcachedプラグインを使用して、1つのgetコマンドで複数の値を取得しようとすると、誤った値が返されました。(バグ #29675958、バグ #95032)

● InnoDB:trx_sys_t::serialisation_mutexは、trx_sys_t::mutexでの競合を減らすために導入されました。新しいミューテックスは、トランザクション番号が割り当てられた時にtrx_sys_t::serialisation_listを保護します。これは、以前はthe trx_sys_t::mutexによって保護されていました。

 (バグ #27933068、バグ #90643)

● パーティショニング:テーブルがTIMESTAMPによってパーティション化され、タイムゾーンオフセットのあるタイムスタンプリテラルがSELECTステートメントのWHERE句で使用された場合、結果セットからパーティションが省略される可能性がありました。

 タイムスタンプリテラルでタイムゾーンオフセットが指定されている場合、タイムゾーンオフセットのないタイムスタンプに変換されてからタイムスタンプ列と比較されることが期待されますが、これは全ての場合に適切に行われなかったため、その結果、クエリのスキャン対象となるパーティションを選択している時に、パーティションがプルーニングされる可能性がありました。

 タイムゾーンオフセットのあるタイムスタンプが列の値と比較する前に常に説明どおりに変換されることが確実になるようにすることによって、これを修正します。(バグ #101530、バグ #32134145)

● レプリケーション:SOURCE_CONNECTION_AUTO_FAILOVER=1オプションがレプリケーションチャネルのCHANGE REPLICATION SOURCE TOステートメントで設定されている場合、STOP REPLICA IO_THREADステートメントは、チャネルの接続障害を監視するモニタースレッドを停止せず、アプライヤースレッドを誤って停止する可能性がありました。(バグ #32892977)

● レプリケーション:システム変数replication_optimize_for_static_plugin_configが設定されている場合、サーバーのシャットダウン時にグループレプリケーションと半同期レプリケーションのプラグインを正常にアンインストールできませんでした。(バグ #32798287)

● レプリケーション:グループレプリケーションのシングルプライマリモードでは、データのシリアル化中にトランザクションデータの不要なコピーが作成されました。これは、メモリフットプリントを削減するために、単一のステップで実行されるようになりました。(バグ #32781945)

● レプリケーション:START GROUP_REPLICATIONステートメントとSTOP GROUP_REPLICATIONステートメントがグループのビュー変更が行われているのと同時に発行された場合、デッドロックが発生する可能性がありました。(バグ #32738137、バグ #32836868)

● レプリケーション:コードのデフォルト値が正しくないということは、レプリケーショングループに許可されているIPアドレスの許可リストが、値が指定されていなくても、暗黙的に再設定されたことを意味します。(バグ #32714911)

● レプリケーション:グループメンバーのレプリケーションチャネルがトランザクションをコミットしようとした時にSTOP GROUP_REPLICATIONステートメントが発行された場合、デッドロックが発生する可能性がありました。サーバーは、ロックとコミットが完了するのを待ち、デッドロックが引き起こされるのではなく、関連するロックを取得できない場合は、トランザクションをすぐにロールバックするようになりました。(バグ #32633176)

● レプリケーション:マルチスレッドレプリカでは、トランザクションを再試行する時に、アクティブなイベントへの参照が正しく管理されないことがありました。(バグ #32590974)

● レプリケーション:以前は、レプリケートされたトランザクションの元のコミットタイムスタンプが、それを適用するレプリカの即時コミットタイムスタンプよりも新しい場合、警告メッセージがエラーログに書き込まれました。レプリケーションラグの変動が、関係するマシン間のクロック差と同様の値である場合、メッセージが不適切に発生する可能性がありました。これは、マシン間の接続品質が向上することで発生する可能性が高くなりました。グループレプリケーションのフェイルオーバー手順が発生した場合、トランザクションごとにメッセージが返され、ログをあふれさせる可能性がありました。この状況を回避するために、警告メッセージは取り下げられました。(バグ #32554807)

● レプリケーション:128を超えるパーティションを持つテーブルの最後のパーティションでDML操作が実行された後、MySQLサーバーとMySQLクライアント(mysqlbinlogなど)がバイナリログからイベント情報を誤って解析したため、パーティションIDが不正確になりました。その情報は、エンディアン非依存であるイベントリーダー関数を使用して読み取られるようになりました。(バグ #32358736、バグ #102191)

● レプリケーション:新しいMySQLサーバーのインストールでは、mysql.gtid_executedシステムテーブルに、他のレプリケーション関連テーブルに存在する永続的な統計を無効にするためのプロパティSTATS_PERSISTENT=0がありませんでした。(バグ #32250735)

● レプリケーション:テーブル内の同じ行が同じイベントによって複数回更新された場合、レプリケーションアプライヤーのハッシュスキャンアルゴリズムは、binlog_row_value_options=PARTIAL_JSONが設定されている時にログに記録されるJSON部分更新をチェックするために省略されました。これにより、“key not found”エラーでレプリケーションが停止する可能性がありました。(バグ #32221703)

● レプリケーション:レプリカサーバーは、GTIDに関連付けられたトランザクションを適用してコミットする前に、GTIDのトランザクションID部分をチェックして検証するようになりました。(バグ #32103192)

● レプリケーション:グループレプリケーションシステム変数group_replication_consistency = AFTERが設定されている場合、ローカルで準備されたトランザクションが完了するまでビュー変更イベントが遅延すると、別のGTIDがそれに適用され、レプリケーションでエラーが発生する可能性がありました。この状況を回避するために、データは受信されたのと同じ順序で処理されるようになりました。(バグ #31872708)

● レプリケーション:トランザクションの依存関係の計算に使用される書き込みセットハッシュから一意のセカンダリキーが省略された場合、マルチスレッドレプリカでレプリケーションが停止する可能性があり、それはマルチスレッドレプリカでトランザクションを実行する時にエラーにつながりました。一意の2次キーが、読み取りセットと書き込みセットに含まれていない場合でも、書き込みセットハッシュには常に含まれるようになりました。(バグ #31636339)

● レプリケーション:マルチスレッドレプリカ(slave_parallel_workers > 0)では、欠落しているトランザクションをチェックするためにGTID自動配置によって使用されるアルゴリズムは、その計算中にイベント位置に低い値(4)を一時的に設定します。その時点で操作が停止すると、一連のトランザクションのギャップを解決するリカバリプロセスが失敗する可能性があります。GTID自動配置が使用される場合、ギャップを解決するプロセスは実際には必要ないため、この状況ではプロセスは現在無効になっています。

 その結果、マルチスレッドレプリカでは、インスタンスにGTID_MODE = ONが設定され、CHANGE REPLICATION SOURCE TOステートメントを使用してチャネルにSOURCE_AUTO_POSITIONが設定されている場合、次の動作が適用されるようになりました。

  ・START REPLICA UNTIL SQL_AFTER_MTS_GAPSステートメントは、実行する最初のイベントを検出した時にアプライヤースレッドを停止するだけであり、トランザクションのシーケンスのギャップをチェックしようとはしません。

  ・トランザクションのシーケンスにギャップがある場合でも、CHANGE REPLICATION SOURCE TOステートメントは自動的に失敗することはありません。

 これらの変更された動作は、GTIDとGTID自動配置を使用するマルチスレッドレプリカにのみ適用され、バイナリログの位置ベースのレプリケーションを使用するレプリカには適用されません。(バグ #30571587、バグ #97694)

● Microsoft Windows:Windowsイベントログへの書き込みが失敗する可能性がありました。(バグ #32890918)

● JSON:CSVストレージエンジンを使用するテーブルからJSON値を読み取ると、Cannot create a JSON value from a string with CHARACTER SET 'binary'などのエラーが発生しました。これは、CSVエンジンがレコードバッファの文字セットとしてmy_charset_binを使用しているが、JSON値の作成にはmy_charset_binの明示的なチェックが含まれており、この文字セットが指定されている場合はエラーが発生するために、発生しました。

 データを保持するバッファの文字セットではなく、列の実際の文字セットを渡すことによって、この問題を処理します。これは常にバイナリです。(バグ #102843、バグ #32597017)

● 派生条件のプッシュダウン最適化を適用できるクエリは、クエリがINSERT ... SELECTの一部である場合、それほど最適化されていませんでした。(バグ #32959186)

● 多数のアカウントとスキーマでは、アクセス権限情報のインポート操作が非常に遅くなりました。(バグ #32934351)

● フルテキストインデックススキャンの結果を並べ替える必要のあるクエリは、状況によっては正しく処理されませんでした。(バグ #32924198)

●(バグ #32919118、バグ #103788)

● サブクエリにGROUP BY、ORDER BY、およびLIMITを含み、カーソルを使用してアクセスされるクエリは、サーバーを終了させる可能性がありました。(バグ #32918240)

● --helpオプションと--verboseオプションを指定して呼び出すと、mysqldは現在のディレクトリにauto.cnfファイルを作成しました。(バグ #32906164)

● ビュー参照を含む条件をマテリアライズされた派生テーブルにプッシュダウンすることを含むクエリは、サーバーの終了を引き起こす可能性がありました。(バグ #32905044、バグ #32324234)

● ER_CANT_INITIALIZE_UDFエラーのメッセージは切り捨てられる可能性がありました。(バグ #32891703)

● MySQL 8.0.23で実行されたストリーミングアグリゲーション(既にソートされたデータのGROUP BY)の簡略化でリグレッションが見つかりました。

 この問題を次のように修正します:全文検索の対象となる単一のテーブルに暗黙的なグループ化がある場合、一時テーブルを強制的に挿入して、MATCH()の一時テーブルをAggregateIteratorに送信する前にマテリアライズします。これは、受信した行を保存および復元しようとしますが、全文検索情報が非表示になっているので、適切に含めることができないためです。(バグ #32889491)

 参照:この問題は、バグ #31790217のリグレッションです。

● -DBL_MAXを文字列に変換し、doubleに戻す場合、新しいdouble値は元の値とは異なり、範囲外として拒否されました。(バグ #32888982、バグ #103709)

● 現在、JSON_LENGTH()関数にオプションのpath引数が含まれる場合は常に、サーバーはそれをJSON_LENGTH(JSON_EXTRACT(doc, path))として書き換えます。これは、JSON_LENGTH()が、次に示すように、パス内のワイルドカード($, ., and *など)と配列範囲をサポートするようになったことを意味します。

mysql> SELECT JSON_LENGTH('[1,2,3,4,5,6,7]', '$[2 to 4]') AS x;
+------+
| x    |
+------+
|    3 |
+------+

 (バグ #32877703)

● RPMおよびDebianパッケージに通常使用されるフラグの場合、新しいWITH_PACKAGE_FLAGS CMakeオプションは、それらのプラットフォーム上のスタンドアロンビルドにそれらのフラグを追加するかどうかを制御します。非デバッグビルドのデフォルトはオンです。これは、ビルドを「強化」するために使用されます。例えば、-D_FORTIFY_SOURCE=2を追加することによって。(バグ #32876974)

● NULLIF()関数は、エラーに対して必要な全てのチェックを実行しませんでした。(バグ #32865008)

● 他のビューに依存するビューの場合、ダンプファイルの生成中に使用されるSHOW CREATE VIEWステートメントからの出力により、復元時にエラーが発生する可能性がありました。(バグ #32854203、バグ #103583)

● query-attributesコードは、大きな64ビット数を適切に処理しませんでした。(バグ #32847269)

● パフォーマンススキーマのmetadata_locksテーブルから取得した情報は、外部キーとCHECK制約に対して正しくない可能性がありました。(バグ #32832004、バグ #103532)

● ビュー列に対して一意の名前を生成する時に、サーバーは名前が表示されているオブジェクトのみを考慮するようになりました。(バグ #32821372)

● 条件がマテリアライズされた派生テーブルにプッシュダウンされると、派生テーブル式のクローンが条件の(外部クエリブロックからの)列を置き換えます。クローン化されたアイテムにFULLTEXT関数が含まれている場合、それは派生テーブルクエリブロックではなく外部クエリブロックに追加されたため、問題が発生しました。これを修正するために、派生クエリブロックを使用してそのようなアイテムのクローンを作成するようになりました。(バグ #32820437)

● ステートメント内で複数回使用され、サブクエリ内で少なくとも1回使用され、その後、常にtrueまたは常にfalseであるために解決中に削除された共通テーブル式。(バグ #32813547、バグ #32813554)

● 準備時には永続的であるが、最初の実行時には一時的なテーブルに対してステートメントが準備されると、アサーションが発生する可能性がありました。(バグ #32799797)

● 空間関数によって使用される内部関数は、メモリを解放した後にメモリを参照できました。(バグ #32793104)

● 不可能なフィルター最適化により、対応するBKAアクセスパスに必要なMRRアクセスパスが削除されました。(バグ #32787415)

● 対応するサーバー認証プラグインがビルドされている場合、新しいWITH_AUTHENTICATION_CLIENT_PLUGINS CMakeオプションが自動的に有効になります。したがって、その値は他のCMakeオプションに依存し、明示的に設定されるべきではありません。(バグ #32778378)

● MRRイテレータは通常、impossible_null_ref()をチェックすることによりNULLキーを除外しますが、結合条件がIS NULL述語を含むか、NULLセーフの等号演算子≪=>を使用している場合、オプティマイザは、結合条件が結合条件の一部として述語用語を使用しているかどうかを確認する必要があり、そのような場合は内部フラグHA_MRR_NO_NULL_ENDPOINTSを設定しませんでした。現在、ビットマスクを使用して、キーの各列がNULLを拒否するかどうかを確認します。この場合、それ以上の確認なしでHA_MRR_NO_NULL_ENDPOINTSを設定できます。(バグ #32774281)

● 列挙型のシステム変数の場合、SET PERSIST_ONLY var_name = DEFAULTは、記号名ではなく数値を永続化しました。(バグ #32761053)

● X DevAPI操作のCollection.replaceOneおよびCollection.addOrReplaceOneは、ドキュメントの_idフィールドの値が操作に指定されたidパラメータと一致することを確認するようになりました。そうでない場合は、エラーが返されます。(バグ #32753547)

● C APIを使用してプリペアドステートメントを実行するアプリケーションの場合、パラメータのないプリペアドステートメントにクエリ属性を使用することはできませんでした。(バグ #32753030、バグ #32790714、バグ #32955044)

● IN()の引数は、常に正しい文字セットに変換されるとは限りませんでした。(バグ #32746552)

● LOCATE()関数は、引数を評価できなかった場合、無条件にNULLを返しました。現在、null許容不可と判断された式で使用されると、その関数は代わりにゼロを返します。(バグ #32746536)

● 内部関数my_well_formed_len_utf32()は、無効な長さの文字列が提示された時に、アサートされました。現在このような場合は、その関数は代わりに無効な文字列を報告します。(バグ #32745294)

● 関数TRIM()、RTRIM()、LTRIM()は、常に適切なエラーチェックを実行するとは限りませんでした。(バグ #32744772)

● 内部リゾルバー関数の以前の修正により、生成された列を解決できない時にエラーが発生することが保証されました。生成された列がCREATE TABLEステートメントの一部である場合、これは問題なく機能しましたが、生成された列を持つテーブルがMySQL 5.7データベースで生成され、その後MySQL 8.0にアップグレードされた場合、エラーが報告されアップグレードが終了しました。

 関数fix_generated_columns_for_upgrade()でエラーを引き起こしているテーブルを報告する時に正しいポインターを使用することにより、これを修正します。(バグ #32738972)

● SELECTリストでロールアップラッパーの内部を調査し、GROUP BYリストで同じアイテムを見つけようとした時、サーバーは、その式の周囲にキャッシュが追加された可能性があることを考慮していませんでした。現在は、アイテムを探す前に、そのようなキャッシュがアンラップされます。(バグ #32729377、バグ #32918400)

● MIN()またはMAX()を使用するプリペアドステートメントは、動的パラメーターも含む場合、誤った結果を返す可能性がありました。(バグ #32713860、バグ #103170)

● XAトランザクションが拒否された直後またはデッドロックが原因でロールバックを強制された直後にDMLステートメントが実行された場合、レプリケーションが失敗する可能性がありました。(バグ #32707060)

● GROUPING()の複数のインスタンスを含むクエリは、常に正しく処理されるとは限りませんでした。(バグ #32695103)

● EXPLAIN ANALYZEを実行すると、マテリアライゼーションイテレータは全ての単一のinit()呼び出しをカウントします。既存のデータのみを保持している場合でも、マテリアライゼーションのコストは、基になる呼び出しの数に比べて少なすぎるように見えます。マテリアライゼーションイテレータが呼び出しと行のカウントを独自のデータでオーバーライドできるようにすることで、これを修正します。(バグ #32688540)

● メタデータロックコードの競合状態により、サーバーが終了する可能性があります。(バグ #32686116)

● カバーする全文索引の索引のみスキャンは、MATCH()呼び出しが評価された順序に応じて、MATCH()関数への複数の呼び出しを伴うクエリに対して誤った結果を返す可能性がありました。(バグ #32685616)

● プリペアドステートメントにクエリ属性を含めると、ステートメントの実行が失敗する可能性がありました。(バグ #32676878)

● GTIDベースのレプリケーションで複製されたトランザクションには、トランザクションが元のソースサーバーでいつコミットされたかを示すoriginal_commit_timestampと、レプリカでいつコミットされたかを示すimmediate_commit_timestampが含まれます。以前は、original_commit_timestampはグループレプリケーションのビュー変更イベントに設定されていませんでした。このイベントはグループによって合意されましたが、その後、各グループメンバーによって生成および適用されたため、表示可能な出力ではタイムスタンプがゼロとして表示されました。可観測性を向上させるために、グループメンバーは、ビュー変更イベントに関連付けられたトランザクションのローカルタイムスタンプ値を設定するようになりました。(バグ #32668567)

● システムテーブルでDDLステートメントを実行すると、サーバーが終了する可能性がありました。(バグ #32665990)

● --online-migrationオプションを使用すると、移行サーバーへの接続確立中にmysql_migrate_keyringが終了する可能性がありました。(バグ #32651203)

● mysql_migrate_keyringは、ソースキーストアと宛先キーストアが異なる必要があるという条件を適用できませんでした。(バグ #32637784)

● Ubuntuでは、システムキャッシュサイズのチェックが不正確になる可能性がありました。(バグ #32619199、バグ #102926)

● サーバーは、HAVING句にフルテキストインデックスがある列に対してMATCH ... AGAINSTを使用する一部のクエリを正しく処理しませんでした。(バグ #32617181)

 参照:この問題は、バグ #30969045のリグレッションです。

● GTIDベースのレプリケーションで複製されたトランザクションには、トランザクションが元のソースサーバーでいつコミットされたかを示すoriginal_commit_timestampと、レプリカでいつコミットされたかを示すimmediate_commit_timestampが含まれます。以前は、グループレプリケーションサーバーはローカルで生成されたトランザクションをコミットする時にoriginal_commit_timestampを設定しましたが、immediate_commit_timestampは設定しませんでした。可観測性を向上させるために、グループメンバーはこのタイムスタンプを設定するようになりました。トランザクションがグループで発生した場合、original_commit_timestampとimmediate_commit_timestampは両方ともグループレプリケーションによって生成され、それらは同じです。トランザクションがグループ外で発生した場合、original_commit_timestampは保持され、immediate_commit_timestampが設定されます。(バグ #32613896)

● 内部関数Item_func_match::eq()は、Item_func_match_predicateである引数で呼び出された時に、デバッグビルドでアサートエラーを発生させました。このアサーションは、Item_func_matchオブジェクトがItem_func_match_predicateオブジェクトと比較されないことを期待して追加されましたが、述語がHAVING句にある場合、ONLY_FULL_GROUP_BYチェック中にこれが発生する可能性があることが後で判明しました。

 関数が代わりにfalseを返すように、アサーションを削除することでこれを修正します。(バグ #32611913)

● プライマリキー列に対してGROUP BY ... WITH ROLLUPを指定してDISTINCTを使用するSELECTは、列がプライマリキーでない場合とは異なる結果を返しました。(バグ #32565875)

● SELECTリスト内の項目が一定であることが判明したテーブルからのものである場合、ROLLUPラッパーを追加する前にその周囲にキャッシュを追加することが可能でした。それにより、(そのようなラッパーを持たなかった)グループリストでその項目を見つけることができませんでした。これは、キャッシュをアンラップすることで対処されます。(バグ #32559356)

● プリペアドステートメントのパラメータが8KBより長く、次のパラメータがNULL値を表す場合、Cクライアントライブラリは不正な形式の通信パケットエラーを生成する可能性がありました。(バグ #32558782)

● 異なるタイプの引数を比較し、その引数が定数と見なされる場合、サーバーは独自の隠しアイテムキャッシュを挿入して、繰り返しの変換(および発生する可能性のある警告)を節約する可能性があります。これは、EXPLAINなどのステートメントの出力には表示されません。

 ROLLUPの解決は比較が設定された後に実行され、引数を置き換える可能性があるという事実が原因で問題が発生しました。これにより、比較の結果が不正確になる可能性がありました。現在、これが発生すると、比較でキャッシュを再検討する必要があり、古い値を再利用する必要がないことを通知します。(バグ #32548377)

● ロード可能な関数の実装におけるデストラクタの誤った参照カウントは、デバッグビルドのアサーションを発生させたり、非デバッグビルドの関数が存在しないことを報告したりする可能性がありました。(バグ #32528898、バグ #102649)

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

MySQL Editions

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

MySQL Editionsの詳細