2019.10.25

MySQL

MySQL 8.0.18 GA版(リリース日:2019年10月14日)

主な変更点

■ Account Management関連

● CREATE USER、ALTER USER、SET PASSWORDステートメントには、明示的な管理者指定のリテラルパスワードを要求する代わりの手段として、ユーザーアカウントのランダムパスワードを生成する機能が追加されました。

■ コンパイル関連

● 互換性のない変更: my_ulonglong型はMySQLソースコードで使用されなくなりました。この型を使用したサードパーティのコードは、代わりにuint64_t C型を使用する必要があります。また、printf()フォーマット文字列がmy_ulonglong変数の出力に使用された場合、調整が必要になる可能性があります。 (Bug #29453827)

● サーバービルド用のBoostライブラリの最小バージョンは現在1.70.0です。 (Bug #29639344)

● DBUG_TRACEマクロはデバッグコードの作成を支援するために使用できます。ENTER/LEAVEマクロのペアを置き換えることは便利です。例えば、以下を書く代わりに:

  void foo() {
    DBUG_ENTER("foo");
    bar();
    DBUG_VOID_RETURN;
  }

 代わりに以下を書きます:

  void foo() {
    DBUG_TRACE;
    bar();
  }
 (Bug #29589102)

■ 設定関連

● CMakeは、現在、fastcovが使用可能であれば使用できます。fastcovはlcovまたはgcovよりも高速です。これには、GCCとgcovのバージョン9以上が必要です。 (Bug #30011512)

● DISABLE_SHARED CMakeオプションは未使用で削除されました。 (Bug #29971049, Bug #96027)

● Protobuf実行ファイルを検索するためのCMakeコードは、現在、Protobuf実行ファイルを複数のパッケージに分割するプラットフォームで動作します。 (Bug #29953773)

● 新しいADD_GDB_INDEX CMakeオプションは、バイナリの.gdb_indexセクションの生成を有効にするかどうかを決定します。これは、デバッガでの読み込みをより速くします。このオプションはデフォルトで無効です。lldまたはGNU gold以外のリンカーが使用されている場合、効果はありません。 (Bug #29925009, Bug #95857)

● INSTALL_LAYOUT CMakeオプションについて、SLESとWINのオプション値は使用されず、削除されました。 (Bug #29871520, Bug #95654)

● システム変数max_prepared_stmt_countの最大値が100万(1,048,576)から400万(4,194,304)に増加しました。デフォルト値は変更されず16,382のままです。

● MySQL 8.0は、wolfSSLを使用したビルドをサポートしなくなりました。すべてのMySQLビルドは、現在、OpenSSLを使用します。

● RE2ライブラリはMySQLで使用されなくなりました。そのライブラリはソースディストリビューションにバンドルされなくなり、WITH_RE2 CMakeオプションは廃止されました。

■ 接続制御関連

● MySQLは、現在、サーバーへの接続を介して送信されるバイト数を最小化するために、圧縮の使用をより詳細に制御できます。以前は、与えられた接続は圧縮されていないか、zlib圧縮アルゴリズムを使用していました。現在は、zstdアルゴリズム(zstd 1.3)を使用すること、zstd接続の圧縮レベルを選択することも可能です。許可された圧縮アルゴリズムは、サーバー側で設定可能で、同様に、クライアントプログラムによる接続およびマスター/スレーブレプリケーションまたはグループレプリケーションに参加しているサーバーによる接続の接続元側でも設定できます。

 zstdアルゴリズムを使用する接続圧縮では、サーバーがzstdライブラリサポートを使用してビルドされている必要があります。新しいWITH_ZSTD CMakeオプションは、バンドルされているまたはシステムのzstdライブラリを使用するかどうかを示します。

 --compress clientオプションなどのレガシー圧縮制御パラメーターは非推奨になり、将来のMySQLバージョンで削除される予定です。

■ 廃止予定と削除

● MySQLパスワードを指定するためのMYSQL_PWD環境変数の使用は、その値が他のシステムユーザーに見える可能性があるため、安全ではないと見なされます。MYSQL_PWDは現在非推奨になり、そのサポートは将来のMySQLバージョンで削除される予定です。

■ キーリング関連

● MySQL Enterprise Editionには、現在、キーリングストレージのバックエンドとしてHashiCorp Vaultを使用するkeyring_hashicorpプラグインが含まれています。

■ ロギング関連

● サーバー起動中のログバッファリングは、エラーログの出力の表示の遅延を少なくするために調整されました。 (Bug #30019632)

■ オプティマイザ関連

● 最初の一致のスプリットジャンプ操作を含むクエリがイテレータエグゼキューターで誤って処理されました。それらは、現在、書き換えられています。 (Bug #30220791)

● ハッシュ結合は、MySQLで内部等結合を実行する方法として実装されています。例えば、以下のようなクエリは、本リリースからハッシュ結合として実行できます。

  SELECT * 
      FROM t1 
      JOIN t2 
          ON t1.c1 = t2.c1;

 等結合を使用したマルチテーブル結合でも、この最適化を利用できます。

 ハッシュ結合は、実行にインデックスを必要としません。ほとんどの場合、ハッシュ結合は、以前はインデックスを使用しない等結合に使用されていたブロックネストされたループアルゴリズムよりも効率的です。

 デフォルトでは、このリリース以降、結合に少なくとも1つの等結合条件が含まれる場合は常にハッシュ結合が使用されます。この設定は、hash_joinオプティマイザースイッチをオフに設定するか、NO_HASH_JOINオプティマイザーヒントを使用して、上書きできます。加えて、join_buffer_sizeを設定することによって、ハッシュ結合で使用されるメモリ量を制御できます。メモリ要件がこの量を超える結合はディスクで実行されます。オンディスクハッシュ結合は多数のディスクファイルを使用し、この数がopen_files_limitを超えると実行できない場合があります。

 結合されたテーブルのペアの結合条件に、使用されるすべての結合条件のうち少なくとも1つの等結合条件が含まれていない場合、ハッシュ結合は使用できません。ハッシュ結合はデカルト積に使用されますか?つまり、結合条件をまったく指定しない結合です。

 EXPLAIN FORMAT=TREEまたはEXPLAIN ANALYZEの出力で、クエリの最適化にハッシュ結合が使用されているかどうかを確認できます。

● EXPLAIN ANALYZEを追加しました。これは、イテレータベースのタイミング、コスト、クエリに関するその他の情報をTREE形式で提供します。このステートメントはEXPLAINの出力と同様の出力を生成しますが、オプティマイザーの推定値が実際の実行と一致する方法に関する情報がさらに含まれます。

● MySQLは、特定のデータ型の不一致を回避するために、クエリへのキャストの追加を実行するようになりました。つまり、オプティマイザーは、引数のデータ型と予期されるデータ型が一致しない式と条件内のアイテムツリーにキャスト操作を追加するようになりました。これにより、SQL標準に準拠するクエリと同等のクエリが実行され、MySQLの以前のリリースとの下位互換性が維持されます。

 このような暗黙のキャストは、現在は、標準の数値比較演算子のいずれかを使用して比較される時は常に、両方の引数をDOUBLEとしてキャストすることにより、時間型と数値型の間で実行されます。また、それらは、現在は、DATE値またはTIME値とDATETIME値の比較の場合にも実行されます。この場合、引数はDATETIMEとしてキャストされます。

 例えば、SELECT * FROM t1 JOIN t2 ON t1.int_col = t2.date_colのようなクエリは書き換えられ、SELECT * FROM t1 JOIN t2 ON CAST(t1.int_col AS DOUBLE) = CAST(t2.date_col AS DOUBLE)として実行されます。そして、SELECT * FROM t1 JOIN t2 ON t1.time_col = t2.date_colは、実行前にSELECT * FROM t1 JOIN t2 ON CAST(t1.time_col AS DATETIME) = CAST(t2.date_col AS DATETIME)に変換されます。

 EXPLAIN ANALYZE、EXPLAIN FORMAT=JSON、または、EXPLAIN FORMAT=TREEの出力を表示することによって、キャストが特定のクエリに挿入されるタイミングを確認できます。EXPLAINも使用できますが、この場合、後でSHOW WARNINGSを発行する必要もあります。

 この変更により、クエリ結果またはパフォーマンスに違いが生じることは想定されていません。

■ パッケージング関連

● component_test_page_track_component.soテストプラグインは、-testパッケージに移動されました。 (Bug #30199634)

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

■ プラガブル認証

● LDAP認証プラグインを使用するアカウントの失敗した接続のデバッグを支援するために、authentication_ldap_simple_log_statusとauthentication_ldap_sasl_log_statusのシステム変数が最大6(以前は5)の値を受け入れるようになりました。いずれかの変数を6に設定すると、対応するプラグインのエラーログにLDAPライブラリからのデバッグメッセージが書き込まれます。 (Bug #29771393)

■ 空間データサポート

● 以前は、地理的(楕円)SRSのジオメトリ引数について、ST_Distance()はPointとPoint、またはPointとMultiPointの引数タイプのみをサポートしていました。ST_Distance()は、すべてのジオメトリタイプの地理的SRS引数の距離計算をサポートするようになりました。

■ sysスキーマ関連

● sys.schema_unused_indexesビューは、現在は、ユニークなインデックスを除外します。 (Bug #24798995, Bug #83257)

● sys.ps_is_consumer_enabled()関数は、引数が不明なNULLではないコンシューマ名である場合、NULLを返すのではなくエラーを生成するようになりました。 (Bug #24760317)

● 以前は、sysスキーマのソースは別のGitリポジトリで管理されていました。sysスキーマのソースは、現在は、MySQLソースディストリビューションに含まれ、その中で管理されます(scripts/sys_schemaの下)。この変更の結果として、今後のsysスキーマスクリプトのメンテナンスを簡素化するために、init_fileシステム変数で指定されたファイル内のステートメントの受け入れ可能な形式が拡張されました。

 sys.versionビューは非推奨になり、将来のMySQLバージョンで削除される予定です。影響を受けるアプリケーションは、代わりに代替のものを使用するように調整する必要があります。例えば、MySQLサーバーのバージョンを取得するためには、VERSION()関数を使用する。

■ テストスイート関連

● MySQLテストは、最新バージョンのgoogletestを使用するように更新されました。 (Bug #30079649)

■ Xプラグイン関連

● Xプロトコルは、同じクエリに対して発行された多数の警告メッセージを正しく表示しませんでした。 (Bug #30055869)

● NO_BACKSLASH_ESCAPES SQLモードが有効な時に、Xプラグインはコレクションを誤ってテーブルとして報告していました。 (Bug #28208285)

■ 追加・変更された機能

● サーバーが--initializeを使用して実行される時、同時にプラグインをロードする理由はありません。サーバーは、現在は、警告を記録し、--initializeで指定された--plugin-loadオプションまたは--plugin-load-addオプションを無視します。 (Bug #29622406)

● サーバー起動中のINFORMATION_SCHEMAのアップグレードに関連する診断メッセージの数が削減されました。 (Bug #29440725, Bug #94559)

● 8.0より前のMySQLでは、REVOKEは不明な権限を取り消そうとした時にエラーを生成しました。MySQL 8.0では、アカウントは、権限を登録するコンポーネントまたはプラグインのインストール中に付与された動的アカウントである場合、現在サーバーに認識されていない権限を所有できます。そのコンポーネントまたはプラグインがその後アンインストールされる場合、その権限は未登録なりますが、その権限を所有するアカウントはまだそれを所有しています。そのような権限を取り消すことは、実際に無効な権限を取り消すことと区別できません。そのため、REVOKEは不明な権限を取り消そうとする時にエラーを生成しなくなりました。ただし、その権限が現在不明であることを示すために、現在は、REVOKEは警告を生成します。 (Bug #29395197)

● 新しいinnodb_idle_flush_pct変数によって、アイドル期間中のページフラッシュに制限を設けることができ、それによりソリッドステートストレージデバイスの寿命を延ばすことができます。 (Bug #27147088, Bug #88566)

● --helpオプションで起動されたmysqldは、secure_file_priv引数が存在しない場合に中断しなくなりました。 (Bug #26336130)

● グループ通信接続の場合、グループレプリケーションは、現在、TLSv1.3プロトコルをサポートします。これは8.0.16からのMySQLサーバーでサポートされていました。TLSv1.3プロトコルを使用するためには、MySQLサーバーをOpenSSL 1.1.1以降を使用してコンパイルする必要があります。

● 新しいオプションOFFLINE_MODEがgroup_replication_exit_state_actionシステム変数に利用可能になりました。これは、サーバーインスタンスが意図せずにグループを離れた時にグループレプリケーションがどのように動作するかを指定します。例えば、アプライヤエラーの発生後、大多数が失われた場合、または、グループの別のメンバーが疑わしいタイムアウトのためにそれを追放した場合。

 終了アクションとしてOFFLINE_MODEが指定されている場合、グループレプリケーションは、システム変数offline_modeをONに設定することによって、MySQLをオフラインモードに切り替えます。メンバーがオフラインモードの場合、接続されたクライアントユーザーは、CONNECTION_ADMINまたはSUPER権限を持つクライアントユーザーを除き、次の要求で切断され、接続は受け入れられなくなります。また、グループレプリケーションはシステム変数super_read_onlyをONに設定します。そのため、クライアントはSUPER権限で接続していても更新を行うことはできません。

 OFFLINE_MODE終了アクションは、デフォルトのREAD_ONLY終了アクションが行うような更新を防ぎますが、古い読み取り(指定された権限を持つクライアントユーザーによる読み取りを除く)も防ぎ、MySQLルーターなどのプロキシツールがサーバーが利用できないことを認識し、クライアント接続をリダイレクトできるようにします。また、インスタンスをシャットダウンする既存の代替の終了アクションABORT_SERVERとは異なり、管理者がMySQLをシャットダウンせずに問題の解決を試みることができるように、インスタンスを実行したままにします。

● デフォルトでは、MySQLレプリケーション(グループレプリケーションを含む)は、別のサーバーによって既に受け入れられたトランザクションがレプリケーションスレーブまたはグループメンバーに適用されている場合、権限チェックを実行しません。MySQL 8.0.18から、通常はチャネルで複製されるトランザクションを適用するために適切な権限を持つユーザーアカウントを作成して、これをレプリケーションアプライヤのPRIVILEGE_CHECKS_USERアカウントとして指定することができます。次に、MySQLは、そのチャネルに対する操作が許可されていることを確認するために、各トランザクションをユーザーアカウントの権限と照合します。また、管理者はこのアカウントを安全に使用して、mysqlbinlog出力からトランザクションを適用または再適用することもできます。例えば、チャネルのレプリケーションエラーから回復するために。PRIVILEGE_CHECKS_USERアカウントを使用すると、権限のある操作や不要な操作の許可されない使用や偶発的な使用からレプリケーションチャネルを保護できます。

 ユーザーアカウントがレプリケーションアプライヤスレッドのPRIVILEGE_CHECKS_USERとして表示され、mysqlbinlogによって使用される内部使用BINLOGステートメントを実行するために、REPLICATION_APPLIER権限を付与します。ユーザーアカウントの設定後、GRANTステートメントを使用して追加の権限を付与し、サーバーに保持されている特定のテーブルの更新など、アプライヤスレッドに実行を期待するデータベース変更をユーザーアカウントが行えるようにします。これらの同じ権限は、レプリケーションチャネルでそれらのトランザクションのいずれかを手動で実行する必要がある場合、管理者がそのアカウントを使用できるようにします。適切な権限を付与しなかった予期しない操作が試行された場合、その操作は許可されず、レプリケーションアプライヤスレッドはエラーで停止します。

● 内部メッセージサービスがグループレプリケーションに追加されました。MySQLモジュールは、グループレプリケーションの既存のグループ通信接続を使用して、すべてのグループメンバーに識別タグ付きの汎用メッセージを送信するためにそのサービスを使用できます。

● relay_log_info_fileシステム変数と--master-info-fileオプションは廃止されました。これらは、--relay-log-info-repository=FILEと--master-info-repository=FILEが設定されているが、これらの設定が廃止予定になった時に、リレーログ情報ログとマスター情報ログの名前を指定するために使用されました。リレーログ情報ログとマスター情報ログのファイルの使用は、クラッシュセーフなスレーブテーブルに取って代わられました。これはMySQL 8.0のデフォルトです。

● --slave-rows-search-algorithmsオプションとslave_rows_search_algorithmsシステム変数は現在は非推奨になりました。これらは、行ベースのロギングとレプリケーションのために行のバッチを準備する時に、一致する行を検索する方法を制御するために使用されました。デフォルト設定のINDEX_SCAN、HASH_SCANはパフォーマンスに最適であることがわかっており、すべてのシナリオで正しく機能します。

● log_bin_use_v1_row_eventsシステム変数は現在非推奨になりました。ONに設定すると、この変数は、MySQL 5.6からのデフォルトであるVersion 2のバイナリログ行イベントの代わりに、Version 1のバイナリログ行イベントを使用してmysqldがバイナリログを書き込むようにしました。(デフォルトはオフです。)Version 1のバイナリログ行イベントを使用すると、Version 2のバイナリログ行イベントを使用できなかった5.5以前のMySQL Serverを実行しているスレーブでの行ベースのレプリケーションが可能になりました。

● WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()関数は現在非推奨になりました。代わりにWAIT_FOR_EXECUTED_GTID_SET()関数を使用してください。両方の関数は、指定されたトランザクションのすべてが適用されるまで、または、オプションのタイムアウトが経過するまで待機します。しかしながら、WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()は特定のレプリケーションチャネルに適用され、アプライヤが実行していなければならないそのチャネルにトランザクションが適用された後にのみ停止しました。対照的に、WAIT_FOR_EXECUTED_GTID_SET()は、(レプリケーションチャネルまたはユーザークライアントから)適用された方法、および、レプリケーションチャネルが実行されているかどうかに関わらず、指定されたトランザクションがサーバーに適用された後に停止します。予期されるトランザクションが別のレプリケーションチャネルまたはユーザークライアントから到着した場合、WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()は無制限にハングすることがありました。例えば、フェイルオーバーまたは手動リカバリの状況などで、タイムアウトが設定されていない場合。

● Protobufライブラリは現在動的にリンクされるようになりました。これらのデフォルトの場所は、RPMの場合は/usr/lib64/mysql/private/、DEBの場合は/usr/lib/mysql/private/、TARビルドの場合は/lib/private/です。新しいINSTALL_PRIV_LIBDIR CMake変数がその場所を制御します。

■ 主なバグ修正

● NDB Cluster:プッシュされた条件を使用して処理されたクエリは、ORDER BY句が含まれている時に誤った結果を生成しました。 (Bug #29595346)

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

● NDB Cluster:NDBトランスポーターレイヤーはメッセージのサイズを32768バイトに制限します。送信バッファは、メッセージサイズに追加の(より厳しい)制限を設けます。メッセージが送信バッファに追加される度に、そのメッセージが使用可能なスペースに収まることを確認するためにページチェックが実行されます。収まらない場合は、新しいページが使用されます。現在の問題は、このメッセージが空のページに収まることを確認するためのチェックが実行されなかったという事実が原因で発生しました。メッセージのサイズが空のページを超えると、結果として、バッファが上書きされ、メモリ内の次のページが上書きされます。データノードの場合、送信バッファ(thr_send_page)でサポートされる最大メッセージは32756バイトです。APIおよび管理ノードの場合、この最大値は32752バイトです。(個々のデータノード内で送信される信号は、この場合には送信バッファまたはトランスポータバッファが使用されないためにこれらの制限を受けません)。現在は、新しいページが使用される時には、メッセージのサイズは新しいページで使用可能なサイズと照合されます。

 前述の問題を修正するために行われた作業の一環として、関連するテストとデバッグを容易にするために3つの新しいDUMPコマンドが追加されました。DUMP 103003 (CmvmiRelayDumpStateOrd)は、別のノードを使用してDUMPコマンドを送信します。DUMP 103004 (CmvmiDummySignal)とDUMP 103005 (CmvmiSendDummySignal)は、長いメッセージを送信するのに使用できます。 (Bug #29024275)

● NDB Cluster:EXPLAIN FORMAT=TREEは、NDBCLUSTERストレージエンジンにプッシュダウンされた条件や結合の適切な説明を提供しませんでした。問題には以下が含まれます。

 ・プッシュされた条件が表示されませんでした。
 ・プッシュされた結合のルートが表示されませんでした。
 ・プッシュされた結合の子にその親操作への参照が含まれていませんでした。

● InnoDB:内部関数(btr_push_update_extern_fields())は不要になりました。これは、新たに追加された外部に保存されたフィールドを取得し、悲観的な更新中または以前のバージョンのレコードに戻る場合にそれらを更新するために使用されていました。新しく追加された外部保存フィールドは、別の機能によって更新されます。また、外部保存フィールドの数を決定するために使用される方法が修正されました。 (Bug #30342846)

● InnoDB:データファイルが欠落しているUNDOテーブルスペースでDROP UNDO TABLESPACE操作を行うと、セグメンテーションエラーが発生しました。 (Bug #30155290)

● InnoDB:内部trx_rseg_add_rollback_segments関数のエラーが修正されました。 (Bug #30114226, Bug #96372)

● InnoDB:Contention-Aware Transaction Scheduling(CATS)コードの問題のあるアサーションコードが修正されました。 (Bug #30086559)

● InnoDB:ib::fatalコンストラクタとib::fatal_or_errorコンストラクタからの呼び出しで派生クラスに渡された引数は無視されることがあり、結果として無効なエラーメッセージが表示されました。さらに、致命的なエラーの場合、ib::fatal_or_errorデストラクターは、メッセージを出力する前にサーバーを終了させる可能性がありました。 (Bug #30071930)

● InnoDB:破損したテーブルが、テーブルの参照カウントがゼロに達する前に、テーブルキャッシュから削除される可能性がありました。 (Bug #30065947, Bug #96224)

● InnoDB:内部row_update_inplace_for_intrinsic()関数のコードパスに必要なミニトランザクション(mtr)コミットが含まれていなかったために、デバッグアサーションエラーが発生しました。 (Bug #30065518)

● InnoDB:内部fsp_srv_undo_tablespace_fixup()関数は、起動中に呼び出された時にundo::ddl_mutexロックを取得しませんでした。これにより、特定の状況下でアサーションエラーが発生する可能性がありました。 (Bug #30029433)

● InnoDB:rename_tablespace_name()関数の検査は、old_shard->get_space_by_id(space_id)がテーブルスペースIDを見つけられなかった場合、old_shard->mutex_release()を呼び出すことなく戻ることを示しました。 (Bug #30027771)

● InnoDB:名前に“FTS”が含まれるテーブルスペースがフルテキストインデックステーブルのテーブルスペースであると誤って判断され、アップグレード中にデータディクショナリに登録されなかったため、そのアップグレード操作は失敗しました。 (Bug #29992589)

● InnoDB:変更バッファ内のページのマージと削除を担当するibuf_merge_or_delete_for_page()関数は、UNDOテーブルスペースと一時テーブルスペースに対して呼び出されなくなりました。変更バッファは、それらのテーブルスペースタイプのエントリを含みません。 (Bug #29960394, Bug #95989)

● InnoDB:バッファープールサイズ変数のいくつかの組み合わせ(--innodb-buffer-pool-instances、--innodb-buffer-pool-size、および、--innodb-buffer-pool-chunk-size)は、バッファプールの作成およびサイズ設定中にエラーを引き起こす、0、1、またはページサイズの倍数ではない値などのチャンクサイズの原因となります。 (Bug #29951982)

● InnoDB:UNDOテーブルスペースが切り捨てられている間にサーバーが終了すると、サーバーの再起動後にクローン操作がロールフォワードされた時に、次のエラーが発生しました:[ERROR] [MY-011825] [InnoDB] [FATAL] Clone File Roll Forward: Invalid File State: 0。 (Bug #29949917)

● InnoDB:ALTER TABLE ... DISCARD TABLESPACE操作がハング状態を引き起こしました。(Bug #29942556, Bug #30324703)

● InnoDB:アーカイブスレッドの失敗後、クローニング操作が次のエラーで失敗しました:ERROR 3862 (HY000): Clone Donor Error: 1317 : Query execution was interrupted。 (Bug #29930839)

● InnoDB:クローン関連のリグレッションにより、インデックスおよび非インデックスの更新操作のパフォーマンスがわずかに低下しました。 (Bug #29925409)

● InnoDB:InnoDBは、現在、起動時に発生するテーブルスペース検出スキャン中に隠しディレクトリとファイルを無視します。隠しディレクトリとファイルには、"."で始まるものや、属性によって識別されるWindows上の隠しシステムディレクトリとファイルが含まれます。 (Bug #29900671, Bug #95071, Bug #30068072)

● InnoDB:デッドロックの検出を改善するために、データロック間のデッドロックサイクルを検出するタスクがトランザクションスレッドから専用のバックグラウンドスレッドに移動されました。 (Bug #29882690)

● InnoDB:mysqldの初期化中にmysql.gtid_executedテーブルを更新すると、次の警告がエラーログに出力されました:[Warning] [MY-010015] [Repl] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened。その更新や関連する警告はもう発生しません。 (Bug #29871809)

● InnoDB:InnoDB Standard Monitor出力(またSHOW ENGINE INNODB STATUSによって出力される)のLATEST DETECTED DEADLOCKセクションが拡張され、デッドロックサイクルに参加するトランザクションについての追加情報が含まれるようになりました。 (Bug #29871641)

● InnoDB:シリアル化されたディクショナリ情報(SDI)の保存に使用されるバッファのサイズをチェックする時に、誤った引数がSDIの入力値と出力値の比較に使用されました。 (Bug #29871525, Bug #95606)

● InnoDB:ドナーの異なるディレクトリから受信者の同じディレクトリに同じ名前のUNDOテーブルスペースファイルがコピーされた時、クローニング操作中にUNDOテーブルスペースファイルが上書きされました。現在は、重複するUNDOテーブルスペース名が検出された場合、クローニング操作がエラーを報告します。データが受信者にコピーされると、UNDOテーブルスペースファイルはinnodb_undo_directory変数で定義されたディレクトリにコピーされます。ファイルは同じディレクトリにコピーされるため、重複するUNDOテーブルスペースファイル名は許可されません。 (Bug #29837617)

● InnoDB:小さいREDOログファイルサイズと多数のトランザクションを持つMySQLサーバーインスタンスからクローンを作成する時、クローニング操作は多数のREDOログファイルを生成しました。多数のREDOログファイルにより、起動がハングまたはアサートされることがありました。それ以外の場合、起動は過剰な数のREDOログファイルをクリーンアップすることなく開始することを許可されました。 (Bug #29837490)

● InnoDB:リカバリ中、暗号化されたテーブルにREDOログを適用する時に発生するテーブルの欠落エラーは無視されることがあり、その場合起動は開始できます。この場合、起動は停止されるべきです。 (Bug #29820184, Bug #95183)

● InnoDB:起動時に間違ったREDOログファイルサイズがサーバーエラーログに出力されました。 (Bug #29818711)

● InnoDB:待機中のレコードロックリクエストが存在する時のロックキュー内のロックオブジェクト(lock_t構造体)の再利用を防ぐ制限が削除されました。 (Bug #29814308)

● InnoDB:長いパーティションテーブル名をファイル名に変換する時、ファイル名を保持するバッファに十分なスペースがなかったため、アサーションエラーを引き起こしました。 (Bug #29813582)

● InnoDB:一部のトランザクションロック構造フィールド(trx->lock)は適切にミューテックス保護されていませんでした。 (Bug #29809137)

● InnoDB:リカバリ中の空のUNDOセグメント更新がアサーションを発生させました。 (Bug #29802703)

● InnoDB:受信者データにフルテキストインデックスのあるテーブルが含まれている場合、受信者のデータを削除しようとすると、クローニング操作が失敗しました。 (Bug #29796507)

● InnoDB:file-per-tableテーブルスペースが破棄された後、古いテーブルの名前が変更され、同じ名前で新しいテーブルが作成されると、エラーが報告されました。このエラーは、古いファイルパス情報が原因でした。 (Bug #29793800)

● InnoDB:サーバーがディスクフル状態の時に読み取り専用モードでファイルを開こうとするテストケースは、デバッグアサーションの失敗を引き起こしました。サーバーがファイルを開くことを再試行できるようにし、何度か試行した後に成功しなかった場合にはエラーを報告するために、このアサーションは削除されました。 (Bug #29692250, Bug #95128)

● InnoDB:RENAME TABLE操作中に構築された外部キー関連テーブルに、古いテーブル名が含まれていました。 (Bug #29686796)

● InnoDB:サーバーは、データの長さがゼロでない列にNULL値を渡しました。 (Bug #29654465)

● InnoDB:MySQL 8.0.13(またはそれ以前)のインスタンスからMySQL 8.0.14、8.0.15または8.0.16のインスタンスへのパーティションテーブルのインポートは、lower_case_table_names=1で定義されたソースインスタンスとターゲットインスタンスに対して“tablespace is missing”エラーで失敗しました。インポート操作で使用されるテーブルスペースファイルとメタデータファイルは、ファイル名の大文字と小文字が一致しないため、見つかりませんでした。 (Bug #29627690, Bug #94850)

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

● InnoDB:読み取りセット(TABLE::read_set)がQUICK_SKIP_SCAN_SELECT::get_next()のハンドラーメソッド呼び出しに対して正しく設定されなかったため、アサーションエラーが発生しました。 (Bug #29602393)

● InnoDB:マスターキーのローテーション中にテーブルスペースのトランケート操作をブロックするために、排他的バックアップロックが使用されるようになりました。以前は、UNDOテーブルスペース名のメタデータロックが操作の同期に使用されていました。 (Bug #29549938)

● InnoDB:範囲を指定するWHERE条件を使用したSELECT...FOR [SHARE|UPDATE]クエリを実行する時に不要な次のキーロックが行われ、これによりロックされる行は多過ぎました。検索される範囲と交差する行とギャップのみがロックされるように、この問題の最も一般的な発生に対処しました。 (Bug #29508068)

● InnoDB:普通の列と一緒に最初の位置に仮想列を追加すると、アサーションエラーが発生しました。 (Bug #29501324)

● InnoDB:シャットダウンプロセスはInnoDBバックグラウンドスレッドが終了するのを待たなかったために、バックグラウンドスレッドがMySQLトランザクションリストからトランザクションを削除するのを待機し、シャットダウンが停止する可能性がありました。現在は、InnoDBバックグラウンドスレッドが適切に終了したことを確認するためのチェックが行われます。また、InnoDBマスタースレッドのシャットダウンのタイミングを改善するために、中間シャットダウン状態が追加されました。 (Bug #29417503)

● InnoDB:割り当てられたメモリの最後のブロックの割り当て解除に失敗したため、TempTableストレージエンジン操作中にメモリリークが発生しました。それは、TempTableがスレッドの終了までスレッドローカルのストレージに保持します。 (Bug #29300927)

● InnoDB:MySQL 5.7からMySQL 8.0へのアップグレード後、INFORMATION_SCHEMA.INNODB_COLUMNSテーブルはパーティションテーブル列を表示しませんでした。MySQL 8.0リリースで作成されたパーティションテーブルの場合、INFORMATION_SCHEMA.INNODB_COLUMNSは最初のテーブルパーティションの列のみを表示しました。 (Bug #28869903, Bug #93033)

● InnoDB:内部のrtr_page_split_and_insert()関数が再帰的に呼び出されます。
その関数への内部呼び出しは、同じ関数への外部呼び出しによってまだ使用されているオブジェクトを解放するため、アサーションエラーが発生します。 (Bug #28569379)

● InnoDB:特定の状況下で、innodb_limit_optimistic_insert_debug変数を2に設定すると、エラーを報告すべきであった時にデバッグアサーションが発生しました。 (Bug #28552330, Bug #92187)

● InnoDB:トランザクションがレコードロックを次のキーロックにアップグレードしようとすると、デッドロックが発生する可能性がありました。 (Bug #23755664, Bug #82127)

● InnoDB:読み取り操作中に報告されたエラーは、読み取られたファイルの名前を特定しませんでした。 (Bug #21120885, Bug #76020)

● レプリケーション:一部のグループメンバーがサポートしない通信プロトコルバージョンを設定するためにgroup_replication_set_communication_protocol() UDFを使用した場合、プロトコル変更手順が正しく停止されませんでした。この問題は修正されました。 (Bug #30209596)

● レプリケーション:グループレプリケーションによって使用されるTCP接続が長時間のネットワークエラーが原因でタイムアウトした場合、グループ通信エンジン(XCom)はそのローカル接続を再確立できず、インスタンスでのグループレプリケーションの再起動を必要とします(Bug #25656508を参照)。以前は、この状況でグループレプリケーションを停止しようとすると、XComがハングし、再起動ができませんでした。この問題は修正され、XComが正しく終了し、グループレプリケーションは再起動されてローカル接続を再確立できるようになりました。 (Bug #30132500)

 参照:Bug #22158368。

● レプリケーション:ANSI_QUOTES SQLモードが有効になっている時、分散リカバリのリモートクローニング操作を実行するためにMySQL Serverのクローンプラグインの存在を確認すると、グループレプリケーションがエラーを返しました。この問題は修正されました。 (Bug #30099796)

● レプリケーション:default_table_encryptionシステム変数の値は、レプリケーショングループのすべてのメンバーで同じでなければならず、グループレプリケーションの実行中は変更できません。このシステム変数の値の変更は、SET GLOBALステートメントが使用された場合、グループレプリケーションによって許可されませんでしたが、SET PERSISTステートメントが使用された場合、誤って許可されました。 (Bug #30031228)

● レプリケーション:メンバーのgroup_replication_local_address設定が変更され、その後そのメンバーがグループに再参加した場合、古いローカルアドレスのコピーがグループコミュニケーションシステム(GCS)によっていくつかの場所に保持されました。グループレプリケーションのローカルアドレスは、必要な時はいつでも、キャッシュされるのではなくフェッチされるようになりました。 (Bug #29910699)

● レプリケーション:グループレプリケーションが参加メンバーにトランザクションを提供するためにリモートクローニング操作を使用していた時、その操作中に参加メンバーが停止された場合、それはきちんとシャットダウンしませんでした。 (Bug #29902389)

● レプリケーション:default_table_encryptionシステム変数のセッション値がレプリケートされるため、レプリケーションスレーブはデータベースとテーブルスペースの正しい暗号化設定を保持します。table_encryption_privilege_checkシステム変数がONに設定されているレプリケーションチャネルの場合、default_table_encryptionのセッション値が変更されたイベントを適用するためにはTABLE_ENCRYPTION_ADMIN権限が必要です。この権限がレプリケーションスレーブで付与されていなかった場合、イベントに必要な暗号化設定がスレーブ独自のデフォルトの暗号化設定と実際に同じであるいくつかの状況で、レプリケーションがエラーで停止したため、アクションは機能しなければなりませんでした。また、スレーブとは異なる暗号化設定を持つステートメントが機能すべきでない時に成功する可能性もありました。その動作は現在修正され、TABLE_ENCRYPTION_ADMIN権限のないレプリケーションスレーブはその独自のデフォルト暗号化設定に一致するイベントを適用できるようになり、暗号化設定を不必要に設定することは要求されませんが、イベントが別の暗号化設定を必要とする場合は今でも適切な権限チェックが行われます。 (Bug #29818605)

● レプリケーション:group_replication_unreachable_majority_timeoutシステム変数で指定された秒単位のタイムアウトは、2秒ごとにのみチェックされていました。現在、タイムアウトは1秒ごとにチェックされるため、奇数の値が考慮されます。 (Bug #29762005)

● レプリケーション:MySQL 8.0.14のグループレプリケーションに導入された入力チャネルは、グループレプリケーションのグループコミュニケーションシステム(GCS)コンポーネントとローカルグループコミュニケーションエンジン(XCom)インスタンスの間の通信にTCPソケットの代わりに共有メモリキューを使用します。SELinuxインストールではこの入力チャネルを確立できなかったため、MySQL 8.0.14以降にアップグレードされたメンバーはグループに再参加できませんでした。グループレプリケーションが開始されると、XComインスタンスはGCSが入力チャネルへの接続を確立できるようにするために一時的なポート範囲からポートを一時的に開きましたが、SELinuxではmysqldプロセスにこのポートへの接続許可がありませんでした。回避策は、MySQLが任意のポートに接続できるようにSELinuxポリシーを修正することでしたが、これはセキュリティを低下させました。MySQL 8.0.18で、この問題は修正されました。XComとGCSは、入力チャネルへの接続を確立するために一時的なポートを使用しなくなり、代わりにgroup_replication_local_addressシステム変数で設定されたグループレプリケーション通信ポートを使用します。これはSELinuxによって許可される必要があります。 (Bug #29742219, Bug #30087757)

● レプリケーション:SQLスレッドがまだ停止処理中の時にSTART SLAVEステートメントがスレーブでSQLスレッドを開始するために発行され、かつ、同時にスレーブステータスの要求が行われた場合、3つのスレッドが関与するデッドロックが発生する可能性がありました。この問題は、SQLスレッドが停止されている間にロックを早期に解除することによって修正されました。 (Bug #29697588, Bug #95115)

● レプリケーション:グループレプリケーションは、Common Name値にワイルドカードを使用したサーバー証明書を拒否しました。現在は、正しい比較方法が使用されます。 (Bug #29683275, Bug #95068)

● レプリケーション:STOP GROUP_REPLICATIONが発行され、メンバーがグループ内でオフライン状態になった後、グループレプリケーションのグループコミュニケーションシステム(GCS)はメンバーからメッセージを配信することができましたが、エラーになりました。GCSは現在、メッセージを配信する前に、グループに属していることを確認します。 (Bug #29620900)

● レプリケーション:WAIT_FOR_EXECUTED_GTID_SET()関数のロックの問題により、特定の状況でサーバーがハングすることがありました。この問題は修正されました。 (Bug #29550513)

● レプリケーション:START SLAVEステートメントの実行中にbinlog_encryptionシステム変数の値が変更された場合、デッドロックが発生する可能性がありました。 (Bug #29515210)

● レプリケーション:CHANGE MASTER TOステートメントのMASTER_HEARTBEAT_PERIODオプションによって制御されるレプリケーションスレーブのハートビート間隔はミリ秒単位で指定できます。以前は、マスターのバイナリログダンプスレッドはハートビート信号がスレーブに送信されるべきかどうかの計算に秒単位の精度を使用し、複数のスキップされたイベントの場合に過度のハートビートアクティビティを引き起こしていました。この問題を解決するために、マスターとスレーブによるすべてのハートビート関連の計算は、精度のためにナノ秒の精度を使用して実行されるようになりました。 (Bug #29363787, Bug #94356)

● レプリケーション:関数インデックスを使用してテーブルを作成すると、テーブルに隠しGenetated列が作成されますが、この列はテーブル内の同じ位置に常に表示されるとは限りませんでした。つまり、そのテーブルに後で1つまたは複数の列を追加する場合、単一のCREATE TABLEステートメントでその追加列を既に持つ同一のテーブルと比較して、異なる位置にその隠し列を置く場合があります。例えば、この違いは、2つのステートメントCREATE TABLE t (a INT, INDEX ((a+1)))とALTER TABLE t ADD COLUMN b INTによって作成され変更されたt1とCREATE TABLE t2 (a INT, b INT, INDEX ((a+1)))を使用して作成されたt2を使用し、SHOW CREATE TABLE t1とSHOW CREATE TABLE t2が(テーブルの名前以外)同じ結果を生成したとしても、2つのテーブルt1とt2の間で明らかです。

 前述の問題は、バイナリログのTable_map_log_eventsで説明されているテーブルの内部定義が異なるという事実が原因で、問題になる可能性があります。つまり、そのようなテーブルがマスターでCREATE TABLEの後にALTER TABLEを使用して作成され、次にスレーブがmysqldumpを使用してデプロイされた場合、スレーブのバージョンのテーブルは単一のCREATE TABLEステートメントを使用して作成され、その後の行イベントのレプリケーションはタイプが一致しないためにエラーで失敗します。

 この問題は、隠しGenerated列が強制的に常に列リストの最後に配置されるようにし、Generated列が複数の場合は列名でソートするようにすることで修正されています。新しい関数インデックスパーツがテーブルに追加された場合、新しい隠しGenerated列はこのルールに従って挿入されます。さらに、ユーザーがGenerated列ではない新しい列を作成する場合、列は常に最初の隠し列の前に追加されます。

 注意
 この変更の影響を受けるテーブルの構造は、アップグレード中に自動的に変更されません。これは、ALTER TABLEを実行して明示的に行う必要があります。

 (Bug #29317684)

● レプリケーション:RESET MASTERステートメントがその実行中に停止された場合、バイナリログはその後書き込みに利用できませんでした。 (Bug #29125121)

● レプリケーション:遅延プラグインの初期化スレッドなど、一時的またはマイナーなグループレプリケーションタスクを実行した一部のスレッドは、パフォーマンススキーマスレッドテーブルに表示されませんでした。 (Bug #28930537)

● レプリケーション:エラーのためにメンバーがグループを離れる時のグループレプリケーションのプロセスの実装は、メンバーがグループを離れる元の理由に関係なく、メンバーがまったく同じアクションを実行し、同じエラーメッセージを発行することを保証するために、コンポーネント間で標準化されました。 (Bug #28866495)

● レプリケーション:GTIDが使用中かつMASTER_AUTO_POSITIONがONに設定されているマルチスレッドスレーブでは、予期しない停止の後にスレーブはリレーログのリカバリを試みますが、リレーログが失われた場合は失敗し、レプリケーションが開始されませんでした。ただし、GTID自動ポジショニングを使用して失われたトランザクションを復元できるため、この手順は不要でした。リカバリ状況で、スレーブはまずMASTER_AUTO_POSITIONがONに設定されているかどうかを確認するようになり、設定されている場合は、リレーログのリカバリをスキップするようになりました。 (Bug #28830834, Bug #92882)

● keyring_awsプラグインは、商用Docker RPMパッケージに含まれていませんでした。 (Bug #30199423)

● SQLスクリプトからCソースを生成する時、utf8でエンコードされた文字のいくつかが行に分割されました。 (Bug #30152555, Bug #96449)

● ARRAY予約語は、INFORMATION_SCHEMA.KEYWORDSテーブルに未予約としてリストされていました。 (Bug #30134275, Bug #96416)

● ||を含む一部のステートメントは、PIPES_AS_CONCAT SQLモードが有効になっていても、解析エラーを生成しました。 (Bug #30131161, Bug #96405)

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

● SET句が存在する場合、LOAD DATAステートメントはNO_AUTO_VALUE_ON_ZERO SQLモードを誤って無視しました。 (Bug #30126375)

● thread_poolプラグインが有効になっている場合、自動アップグレードはサーバーの終了で失敗しました。 (Bug #30121742)

● マテリアライズされた派生テーブルを実行ごとに再計算するかどうかを決定する時、テーブルの再マテリアライズフラグの代わりに親クエリブロックのキャッシュ不可が使用されました(現在はJSON_TABLE()のみに当てはまります)。これは、特にマージされていないビューに対してクエリを実行する時に、パフォーマンスの低下につながる不必要な再マテリアライゼイションを引き起こす可能性があります。 (Bug #30110851)

● IGNORE句を使用すると、LOAD DATAはCHECK制約違反を引き起こした行をスキップし、次の行を続行すべきですが、エラーで停止します。 (Bug #30084966, Bug #96296)

● sql_require_primary_keyを有効にすると、インデックスまたはプライマリキーをサポートしない2つの動的パフォーマンススキーマテーブルが作成されたため、クローンプラグインの初期化が失敗しました。sql_require_primary_keyの影響は、レプリケーションに参加できるストレージエンジン(現在はパフォーマンススキーマを除くすべてのストレージエンジン)に制限されています。 (Bug #30083300, Bug #96281)

● ProtobufのコンパイルはmacOSで失敗しました。 (Bug #30079536, Bug #96263)

● 自動アップグレードの場合、audit_logプラグインはリロードされなかったため、監査はレガシーモードで開始されました。 (Bug #30068110)

● 重複行を削除するためには、ウィードアウトの最適化で各行に一意の識別子が必要です。これは、handler::position()を呼び出すことによりストレージエンジンによって提供されますが、この関数は常に正しいタイミングで呼び出されるとは限らず、必要でない時に呼び出される時もありました。いつどのようにそのような呼び出しを行うのかに関する問題は、最適化における多くのバグの原因でした。この修正により、handler::position()を呼び出す責任がイテレータに移ります。イテレータのデフォルトの実装は、通常、このタスクを独自で適切に処理します。 (Bug #30060691)

 参照:Bug #29693294, Bug #30049217, Bug #30153695。

● サーバーは、COM_PROCESS_INFOコマンドを誤って処理したために終了する可能性がありました。 (Bug #30032302)

● 非推奨のシステム変数に値が割り当てられると、通常は警告が生成されますが、これはサーバーの起動中に永続化されたシステム変数が処理された時には発生しませんでした。 (Bug #30030648)

● bind_addressに複数のアドレスを含む値を設定した状態で、host_cache_size=0を設定すると、クライアント接続時にサーバーが終了しました。 (Bug #30018958)

● Windowsでは、ProtobufコンパイルがNinjaビルドタイプの場合失敗しました。 (Bug #30018894)

● mysqldumpエラーメッセージバッファが小さすぎたために、メッセージが切り捨てられる可能性がありました。 (Bug #29999782, Bug #96074)

● インプレースアップグレード中にMySQL 5.7からMySQL 8.0にテーブルをインポートする間に、“next to be used”の代わりに最後に使用された自動インクリメント値がキャッシュされました。この結果、アップグレード後にテーブルキャッシュから読み取られたすべてのテーブルは、誤った自動インクリメント値を持ちました。 (Bug #29996434)

● 定数折りたたみを使用したプリペアドステートメントを実行すると、MEMROOTではなくスタックに割り当てられたロールバックの場所を登録することができたため、スコープ内ではなくなりました。 (Bug #29990693)

 参照:Bug #29939331。

● 非推奨になったZEROFILLに関する警告が、YEAR列を含むテーブルを作成したCREATE TABLE ... ASステートメントとCREATE TABLE ... LIKEステートメントに対して生成されました。ZEROFILL属性はYEAR列に暗黙的に追加された可能性があるので、これは混乱を招く可能性があります。混乱を避けるために、警告はそのようなステートメントに対してもう発生しなくなりました。 (Bug #29961060)

● WHERE text_col < (int_col & int_col) AND int_col = -1などのビット単位の演算子を使用したクエリは、期待どおりに行を返しませんでした。 (Bug #29957969)

● オプティマイザーヒントの不正なリソースグループ名により、予期しないサーバー動作が引き起こされる可能性がありました。 (Bug #29955732)

● EXPLAINは、FORMAT=TREEを使用すると、FORMAT=JSONを使用した時と同じコストを表示しませんでした。特に、FORMAT=TREEを使用すると、計算されるコストは結合のeval_costを考慮しますが、ベーステーブルを考慮しませんでした。 (Bug #29953579)

● Solarisの場合、不要になったmemcntl()のプロトタイプがmysqld.ccに含まれていました。そのプロトタイプは削除されました。 (Bug #29953495, Bug #95971)

● Solarisの場合、GCCでコンパイルする時に-DWITH_SSL=systemが機能しませんでした。 (Bug #29953460, Bug #95970)

● -DWITHOUT_SERVER=1を使用して設定されたMySQLビルドは失敗しました。 (Bug #29948728, Bug #95740)

● 内部メソッドField_tiny::pack()は、必ずしも期待どおりに境界チェックを実行するとは限りませんでした。 (Bug #29948029)

● プラグインのアンロードの不適切な処理により、サーバーが終了する可能性がありました。 (Bug #29941948)

● 内部MEM_ROOTクラスは、すべてのメモリ不足エラーを正しく処理しませんでした。 (Bug #29940846)

● JSON_SCHEMA_VALIDATION_REPORT()は、JSONスキーマに従って検証されなかったJSONドキュメントと、ネストが深すぎるJSONドキュメントを区別しなかったため、場合によっては誤った動作をしました。 (Bug #29940833)

● <=>演算子を使用すると、非常に大きな定数を含む比較に対して誤った結果が生じる可能性がありました。 (Bug #29939331, Bug #95908)

● keyring_awsプラグインの場合、keyring_aws_regionシステム変数に対する一部の有効なregion値が拒否されました。 (Bug #29933758)

● デバッグビルドの場合、GEOMETRY列とSELECT * FROM (SELECT NULL)を組み合わせたデータ型を計算する時のUNIONクエリ中にアサーションが発生する可能性がありました。 (Bug #29916900, Bug #95827)

● バイナリ文字セットを使用して定義された列の場合、SHOW CREATE TABLEが、実行時に構文エラーを引き起こすCREATE TABLEステートメントを生成する可能性がありました。 (Bug #29909573, Bug #95801)

● データディクショナリAPIは、特定のストレージエンジンを使用するスキーマ内のテーブル名を取得するために、そして、そのストレージエンジンによって作成され非表示にされるスキーマ内のテーブル名を取得するために追加されました。前者はNDBに必要で、後者はDROP DATABASE操作に必要です。 (Bug #29906844, Bug #95792)

● --order-by-primaryオプションを指定して実行すると、mysqldumpはメモリをリークしました。 (Bug #29906736)

● 関数インデックスを含むクエリの場合、EXPLAIN FORMAT=TREEは、イン​​デックス付き式の代わりに非表示の列名を出力しました。 (Bug #29904996)

● デバッグビルドの場合、CREATE TABLE ... IGNORE SELECT ...ステートメントは、挿入される最後の行がCHECK制約の失敗によりスキップされた時に、テーブルの状態を適切にクリーンアップしませんでした。これにより、そのテーブルを使用する次のステートメントでアサーションが発生する可能性がありました。 (Bug #29903865)

● MySQLは、再帰共通テーブル式(CTE)の再帰クエリの終了条件に別の再帰CTEを使用するIN述語がある場合に、CTEの実行を正しく処理しませんでした。 (Bug #29899614)

● シリアル化されたディクショナリ情報(SDI)の逆シリアル化が、異なるテーブルスペースファイルにパーティションが存在するテーブルに対して失敗しました。 (Bug #29898965)

● LDAP認証プラグインを使用した認証の場合、ユーザーDN部分が空でグループマッピングが設定されている場合、認証は誤ったユーザーDNを割り当て、ユーザー検索をスキップしました。 (Bug #29897624)

● 名前なしで定義された制約は、場合によってはサーバーの終了を引き起こす可能性がありました。 (Bug #29892876)

● MySQL 5.7からMySQL 8.0へのインプレースアップグレードは、NDBテーブルスペースが見つからず失敗しました。 (Bug #29889869, Bug #30113440)

● mysqlpumpは、MySQL 5.7より古いサーバーに対して実行するとエラーを生成しました。 (Bug #29889253)

● Boostがダウンロードされた時、ダウンロードされたファイルのサイズを決定するためのCMake構成ロジックが正しくなく、ダウンロード操作の成功後にそのファイルを削除する可能性がありました。 (Bug #29881279)

● 符号なし整数型のキャストによって発生し得る整数オーバーフローは、任意のサイズのメモリ割り当てによるその後のバッファオーバーフローにつながる可能性がありました。 (Bug #29878914)

● クライアントの文字セットがlatin1以外の時、サーバーはDECIMAL値の文字列表現をlatin1からクライアントの文字セットに変換しました。サポートされているすべてのクライアント文字セットは、latin1と同じ方法で数値をエンコードするため、この変換は不要であったので、もう実行されなくなりました。 (Bug #29875672)

● vio_description()デバッグ関数は、非デバッグビルドで呼び出されました。 (Bug #29871361)

● MySQL 8.0.3の以前の問題に対する修正によって、定数のDATE値を超える式をキャッシュできるかどうかのテストは、定数を超えているかどうかに関わらず、グローバル変数以外のすべての式の許可からすべての関数の全面的拒否に変更されました。これは、文字列のDATE値への変換を実行するためにオプティマイザーが必要とする関連クエリのパフォーマンスに大きく影響しました。このテストはその元の形式に戻されました。 (Bug #29871018)

 参照:この問題は、Bug #85471, Bug #28576018のリグレッションです。

● INFORMATION_SCHEMAは、ストレージエンジンから動的なテーブルの統計を取得できますが、パーティションテーブルに対しては機能しませんでした。 (Bug #29870919, Bug #95641)

● 失敗したアクセス制御ステートメントを再試行すると、別のスレッドが、メタデータロックが解放および再取得された時にウィンドウ内でアクセス制御キャッシュのロックを取得し、デッドロックが発生する可能性がありました。ロックは、再試行操作中に解放されなくなりました。 (Bug #29870899, Bug #95612)

● 適切な権限を持たないユーザーがoffline_modeシステム変数を有効にしようとした場合、アサーションが発生する可能性がありました。 (Bug #29849046)

● Fedoraのパッケージング設定は、mysql_config_editorのデバッグ情報を間違ったパッケージに入れました。 (Bug #29841342)

● MeCabプラグインの初期化中に解放されたオブジェクトを使用しようとすると、セグメンテーションエラーが発生しました。 (Bug #29832534)

● ランダムパスワードのエントロピーを生成するために使用される関数は、あまりエントロピーを提供できない場合がありました。 (Bug #29808492)

● super_read_onlyを有効にすると、サーバーはDROP TABLESPACEを不適切に処理する可能性がありました。 (Bug #29802833)

● サーバーは、マテリアライズされたセミジョインを含むLeftジョインを含むクエリを正しく処理しませんでした。 (Bug #29800741)

● RPMパッケージを使用してインストールされたMySQLに関して、クライアントアカウントがLDAP認証プラグインを使用して認証された場合、サーバーの接続性をテストした初期化スクリプトが正しく動作しませんでした。 (Bug #29786782)

● ストレージエンジンの初期化中の不適切なロックにより、サーバーが終了する可能性がありました。 (Bug #29782379)
● GTID対応サーバーでは、DROP USERとビューにアクセスするプリペアドステートメントの同時実行がデッドロックする可能性がありました。 (Bug #29772622)

● アンチ結合変換を含むSELECT WHERE NOT EXISTS (SELECT FROM (derived_table) WHERE false_condition)の形式のクエリでEXPLAIN FORMAT=JSONを実行すると、サブクエリは削除されましたが、その独自のサブクエリは一緒に削除されずに上に移動されました。 (Bug #29759277)

 参照:Bug #30017509。

● 中断されたテーブルスペース暗号化操作により、データディクショナリとストレージエンジンのメタデータの間に矛盾が生じ、その後のテーブルスペースへのアクセス試行でアサーションエラーが発生しました。 (Bug #29756808)

● イベントスケジューラとDROP EVENTを同時に実行すると、ロック待機タイムアウトまでロックの取得のハングが発生する可能性がありました。 (Bug #29742901, Bug #95223)

● 述語に科学表記法の数値が含まれたWHERE句を含むクエリは、正しく処理されませんでした。 (Bug #29723340)

● 列が式からデフォルト値を取得した場合、CHECK制約が強制されませんでした。 (Bug #29706689, Bug #95192)

● 一時テーブルを使用せずに同じテーブルで2つの並べ替えを実行する場合、両方の並べ替えが同じバッファを使用しようとしたため、範囲外の読み取りが発生しました。これは、同じクエリがDISTINCTとORDER BYの両方を使用した時に発生する可能性がありました。 (Bug #29699759)

● ソートされたテーブルを含むウィードアウトを実行すると、ソートは行IDによって行われませんでした。 (Bug #29693294)

● VS2019は、/ZIフラグの使用により、デバッグコンパイルが選択された場合に、コンパイルエラーを生成しました。現在、/Z7が代わりに使用されます。 (Bug #29691691, Bug #95125)

● ソースディストリビューションでは、dbugディレクトリの古いメンテナンスされていないコードをクリーンアップするために、DBUGパッケージに関連してこれらの変更が行われました。

  ・dbug.ccをmysysディレクトリに移動し、dbugライブラリを削除しました。
  ・dbug.ccの未使用関数を削除しました。
  ・DBUG_LEAVEマクロを削除しました。必要ではなくなりました。
  ・今後も印刷されないであろう文字列のフォーマットを回避するために、
   if_db_enabled_()でDBUG_LOGマクロの本体をラップしました。
  ・dbugディレクトリを削除しました。

 (Bug #29680868, Bug #95082)

● 参照項目配列の割り当て中に、ウィンドウ関数のカウントは考慮されませんでした。その結果、ウィンドウ関数を持つ式が分割された時、新しいアイテム参照を保存するために必要な余分なスペースが適切に割り当てられませんでした。 (Bug #29672621)

● ユーザー変数の照合の設定は、すべての場合に正しく機能しませんでした。 (Bug #29665165)

● SHOWステートメントのWHERE句の処理が一貫して実行されませんでした。 (Bug #29664758)

● 制約を削除する句と追加する句が同じALTER TABLEステートメント内で指定された場合、それらは誤った順序で実行されました。 (Bug #29652464)

● EXPLAINは、現在、結果が行IDによってソートされている時に表示されます。 (Bug #29634196)

● 以下のいずれの場合でも、不要なマテリアライゼイションは実行されなくなりました。

  ・グループ化などのために、結合の最後でソートを実行し、その
   ソートが行IDを使用しない場合。
  ・複数回読み込まれない派生テーブルをマテリアライズする場合。

 (Bug #29634179)

● argが小さすぎたためにFLOAT値として表すことができなかった時、CAST(arg AS FLOAT)は予想される範囲外エラーを返しませんでした。 (Bug #29621333)

● FLOAT値の内部変換が誤った時点で発生することがあり、結果の過剰な精度につながる可能性がありました。以下に示すようにして作成されデータが取り込まれたテーブルを検討してください。

  CREATE TABLE t(f FLOAT);
  INSERT INTO t VALUES (2.3);

 修正前は、このテーブルに対するクエリSELECT f, IF(f > 0, f, 0) FROM tは、期待どおりの(2.3, 2.3)ではなく、(2.3, 2.299999952316284)を返しました。 (Bug #29621062)

● log0meb.ccは、一部のビルドオプションを使用するとコンパイルできませんでした。 (Bug #29616525)

● クライアントライブラリは、サーバーから結果セットのメタデータを取得している間に、nullポインターを逆参照する可能性がありました。 (Bug #29597896)

● 日付値と間隔値を合計する時、間隔値のチェックでランタイムエラーが発生する可能性がありました。 (Bug #29587536)

● Undefined Behavior Sanitizerが有効になっている状態でのビルドでは、-9223372036854775808を使用した乗算は警告と誤った結果を生成する可能性がありました。 (Bug #29581610)

● 起動中、サーバーは記録されるべきではないバイナリログに操作を書き込もうとしました。 (Bug #29557747, Bug #94835)

● 形式CREATE VIEW v1 AS SELECT * FROM table WHERE (constant IN (SELECT constant)のステートメントは、アサーションにつながりました。 (Bug #29525304)

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

● EL6では、FIPS対応のOpenSSLライブラリが利用できない場合、FIPSモードを有効にしようとすると、サーバーの誤動作が発生する可能性がありました。 (Bug #29519794)

● SET PERSIST_ONLYを使用して、(変数設定が発生する方法のために)SET PERSISTができないいくつかのシステム変数の永続化を実行できます。起動時にmysqld-auto.cnfでそのような変数が見つかった場合、サーバーは警告を発行し、設定を無視するようになりました。 (Bug #29511118)

● サーバーが部分的な取り消しとスキーマレベルの権限を適切に集約しない場合がありました。 (Bug #29484519)

● デバッグビルドの場合、DEFAULT句で定義されたENUMまたはSET列がアサーションを発生させました。 (Bug #29480711)

● 開発コンポーネントが選択されていない場合、MySQLのインストーラはOpenSSL DLLの依存関係をインストールしませんでした。 (Bug #29423421, Bug #94168, Bug #30199579, Bug #96573)

● READ UNCOMMITTED分離レベルでは、セグメンテーションエラーがmemcachedクライアントからの高負荷の下で発生しました。1つのトランザクションによって更新されていた外部保存されたBLOB列が、NULL値とゼロ以外のデータ長を持っているとして別のトランザクションによって読み取られました。 (Bug #29396364, Bug #93961)

● IPv6アドレス解決が機能するシステムでは、接続時にIPv6ソケットの作成に失敗すると、メモリリークが発生しました。 (Bug #29374606, Bug #94384)

● レプリケーションシナリオでは、複数のクライアントが同じXID値を使用するXA COMMITまたはXA ROLLBACKステートメントを同時に実行すると、レプリケーションの不整合が発生する可能性がありました。 (Bug #29293279, Bug #94130)

● TIMESTAMPADD()関数の引数は、プリペアドステートメントでは逆にされる可能性がありました。 (Bug #29268394)

● CREATE USERステートメントのDEFAULT ROLEオプションは、バイナリログに書き込まれませんでした。 (Bug #28948915, Bug #93252)

● 無効なmemcachedプラグイン変数設定を使用してコマンドラインからサーバーを起動すると、サーバーが終了しました。 (Bug #28575863)

● LOAD DATAのSET句は、GEOMETRY NOT NULL列を設定するために機能しませんでした。 (Bug #28460369, Bug #91893)

● Windows 8以降では、keyring_awsプラグインはAmazon KMSサーバーと通信できませんでした。 (Bug #28377961)

● ビューに対するクエリにUNION演算子と組み合わせた複数のクエリブロックがある場合、INFORMATION_SCHEMAテーブルとSHOW COLUMNSが誤ったビューの列の型を生成する可能性がありました。 (Bug #28278220, Bug #91486)

● Debianでは、起動時のInnoDBリカバリ時間が長いと、systemdサービスの起動に失敗する可能性がありました。
この発生を防ぐために、デフォルトのsystemdサービスタイムアウトは現在は無効(RHELと一致)になっています。 (Bug #28246585, Bug #91423)

● thread_poolプラグインを有効にすると、sys.processlistビューとsys.sessionビューに、実際のユーザー名ではなくスレッド名が表示されました。 (Bug #25906021, Bug #85976)

● sys.schema_index_statisticsビューのdelete_latency列は、パフォーマンススキーマのtable_io_waits_summary_by_index_usageテーブルのSUM_TIMER_DELETE列ではなく、SUM_TIMER_INSERT列を誤って参照しました。 (Bug #25521928)

● sys.diagnostics()プロシージャからの出力では、user_summary_by_file_io_typeビューのレイテンシ列が、フォーマットされた値としてではなく、フォーマットされていないピコ秒単位で誤って表示されていました。 (Bug #25287996)

● MySQL Enterprise Encryptionの関数は、Diffie-Hellman(DH)メソッドを非DHキーに適用したため、予測できない結果やサーバー終了を引き起こす可能性がありました。 (Bug #22839007)

● SHOW PROCESSLISTと一部のINFORMATION_SCHEMAとパフォーマンススキーマテーブルに対してパスワードマスキングが不完全でした。 (Bug #20712046)

● 厳密なSQLモードが有効になっていると、STR_TO_DATE()関数は時間部分のみの値を適切に処理しませんでした。 (Bug #18090591, Bug #71386)

● WHERE句にGREATEST()を使用するクエリは、特定のケースで、期待された行を返すことに失敗したり、誤ったエラーを発生させたりする可能性がありました。 (Bug #96012, Bug #29963278)

● sort_buffer_sizeを最大値またはそれに近い値に明示的に設定すると、一部のクエリがメモリ不足エラーで失敗しました。 (Bug #95969, Bug #29952775)

 参照:Bug #22594514。

● ルックアップキーに少なくとも1つのNULLが含まれる場合のインデックスルックアップを回避するための遅延NULLフィルタリングは、前方インデックススキャンのためには実行されたが、後方インデックススキャンのためには実行されませんでした。 (Bug #95967, Bug #29954680)

●関数インデックスでIFNULL()やABS()などの関数を使用すると、対応する符号付き整数型の値を超える値がそのような関数の引数として使用されるUNSIGNED列に含まれていた場合、Value is out of range for functional index...エラーにつながりました。 (Bug #95881, Bug #29934661)

● IFNULL()関数の解決手順は、COALESCE()を含むCASE操作から派生した他のすべての関数の解決手順とは異なり、正しくない長さ情報が特定の数値式に対して生成されました。 (Bug #94614, Bug #29463760)

● UNION ALL ... LIMIT 1を使用したクエリは、Handler_read_keyとHandler_read_nextが示すとおりに過剰な数の行を評価しました。 (Bug #79340, Bug #22292995)

 参照:Bug #79040, Bug #22158368, Bug #92994, Bug #28866942。

● -DWITH_EXAMPLE_STORAGE_ENGINE=1 CMakeオプションは無視されましたが、無視されるべきではありませんでした。-DWITH_EXAMPLE_STORAGE_ENGINE=0が指定されている場合、EXAMPLEストレージエンジンはプラグインとしてビルドされます。 (Bug #70859, Bug #17772560, Bug #30133062)

 参照:Bug #18324650。

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

MySQL Editions

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

MySQL Editionsの詳細