2020.07.29

MySQL

MySQL 5.7.31 GA版(リリース日:2020年7月13日)

主な変更点

■ 設定関連

● tcmallocは、mysqld_safe --malloc-libオプションに対して許可された値ではなくなりました。(Bug #31372027)

■ パッケージ関連

● MySQLにバンドルされているlibeventライブラリがバージョン2.1.11にアップグレードされました。(Bug #30926742)

■ セキュリティ関連

● 互換性のない変更:INFORMATION_SCHEMA.FILESテーブルへのアクセスには、PROCESS権限が必要になりました。

 この変更は、mysqldumpコマンドのユーザーに影響を与えます。mysqldumpコマンドは、FILESテーブルのテーブルスペース情報にアクセスするため、現在はPROCESS権限も必要になります。テーブルスペース情報をダンプする必要がないユーザーは、--no-tablespacesオプションを指定してmysqldumpを呼び出すことにより、この要件を回避できます。(Bug #30350829)

● MySQLサーバー用のリンクされたOpenSSLライブラリがバージョン1.1.1gに更新されました。新しいバージョンのOpenSSLで修正された問題は、https://www.openssl.org/news/cl111.txtおよびhttps://www.openssl.org/news/vulnerabilities.htmlで説明されています。(Bug #31296697)

■ 主なバグ修正

● InnoDB:モジュール所有者として定義されたカウンターのINNODB_METRICSテーブルのAVG_COUNT_RESET値がNULLを報告しました。METRIC_AVG_VALUE_RESETフィールドが誤ってNULLとしてマークされました。(Bug #31084706、Bug #98990)

● InnoDB:履歴リストの長さがゼロに近づくと、パージスレッドアクティビティが過剰になり、CPUリソースが浪費され、ミューテックスの競合が発生しました。(Bug #30875956)

● InnoDB:サーバーが“ibuf cursor restoration fails”エラーで断続的に失敗した。(Bug #30770380、Bug #91033)

● InnoDB:致命的な“page still fixed or dirty”エラーがシャットダウン中に発生しました。(Bug #29759555、Bug #95285)

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

● パーティショニング:ORDER BYを使用したパーティションテーブルに対するクエリは、次の条件下で順序付けされない結果を返しました。

  ・テーブルには、いずれかの列に接頭辞が付いた複合インデックスがあった。
  ・クエリのWHERE句に、接頭辞付きの列に等価条件が含まれていた。
  ・接頭辞付きの列が、インデックスの左端の列だった。
  ・ORDER BYで使用された列が、インデックスの右端の列だった。
  ・インデックスが、ORDER BYの処理に使用された。

 (Bug #84070、Bug #25207522)

● レプリケーション:レプリケーションのソースサーバーがシャットダウンして再起動すると、そのMEMORYテーブルは空になります。この結果をレプリカに複製するためには、ソースが起動後に特定のMEMORYテーブルを初めて使用する時、そのテーブルのDELETEステートメントをバイナリログに書き込むことによってテーブルが空にされる必要があることをレプリカに通知します。以前は、生成されたDELETEステートメントは現在のセッションのバイナリログステートメントキャッシュに書き込まれていたため、同じGTIDの下で他のステートメントと一緒にログに記録されたり、BEGINステートメントとCOMMITステートメントなしでログに記録されたりしました。また、状況によっては、生成されたDELETEステートメントが、それをトリガーしたトランザクション用のGTIDを使う場合があります。生成されたDELETEステートメントは、付随するBEGINおよびCOMMITステートメントとともにログに記録され、結果のトランザクションはステートメントキャッシュに書き込まれた直後にバイナリログにフラッシュされます。そのため、常に独自のGTIDを受け取り、他のトランザクションとは別に保持されます。(Bug #30527929、Bug #25681518、Bug #77729)

● レプリケーション:ローカルグループメンバーの統計情報に対するグループレプリケーションからパフォーマンススキーマへの内部クエリは、グループのメンバーシップへの変更と同時に発生した場合、失敗しました。この問題を修正するために、内部クエリのロックが改善されました。(Bug #30049349、Bug #30791583、Bug #30963553)

● レプリケーション:システム変数binlog_transaction_dependency_trackingおよびbinlog_transaction_dependency_history_sizeを含むデッドロックシナリオに関してMySQL 8.0.14およびMySQL 5.7.25で行われた修正により、トランザクション依存関係の追跡に使用される書き込みセットの履歴が同時更新から保護されないままになるという副作用がありました。書き込みセットの履歴と追跡モードは、アクセスされる時はいつも正しくロックされるようになりました。(Bug #29719364、Bug #95181)

 参照:Bug #28511326、Bug #91941。

● -DWITH_EDITLINE=systemを使用して設定すると、古いバージョンのライブラリでコンパイルエラーが発生しました。(Bug #31366715)

● 以前のMySQLディストリビューションにバンドルされたlibeditライブラリをアップグレードすると、mysqlクライアントのCTRL+C(SIGINT)が状況によっては次のEnterが有効になることを必要とするというような、そのライブラリを使用したビルドで問題が発生しました。(Bug #31360025)

● CONCAT('')またはCONCAT_WS('')を変数に割り当てると、変数は空の文字列ではなくNULLに設定されます。(Bug #31320716、Bug #99485)

● gen_range()ユーザー定義関数はその引数を誤って処理し、サーバーを終了させる可能性がありました。(Bug #30763294)

● UPDATE処理中に、内部のインメモリテーブルをInnoDBに変換すると、キー長エラーが発生する可能性がありました。(Bug #30674616)

● *(単一のアスタリスク文字)という名前の列を定義することは可能ですが、SELECT `*`がSELECT *と同じように扱われたため、クエリでこの列のみを選択することはできませんでした。つまり、アスタリスク文字は、バッククォートで囲まれている場合でも、全てのテーブル列のリストに拡大されました。(Bug #30528450)

● 内部のパケット長関数が間違った整数型の値を返しました。(Bug #30139031)

● mysqldumpによるINSERTステートメントの長さの計算では、VARBINARY文字列に使用される_binary文字セットイントロデューサは考慮されませんでした。(Bug #29998457、Bug #96053)

● mysql_store_result()は無効なデータパケットの検出に失敗する場合がありました。(Bug #29921423)

● 最初のテーブルのキーを更新するマルチテーブルUPDATEで、一時テーブル戦略が使用された場合、重複したエントリが一時テーブルに書き込まれ、その後Can't find recordというエラーが発生する可能性がありました。(Bug #28716103)

● オプティマイザが疑似テーブルにテーブルとしてアクセスしようとすると、サーバーが予期しない動作をする可能性がありました。(Bug #28651673)

● サーバーは、クエリを最適化する時に、GROUP BYを含むサブクエリを誤って削除することがありました。このサブクエリが外部選択によって使用された場合であってもです。これは、サブクエリが集約関数も使用した時に発生する可能性がありました。(Bug #28240054)

● NAME_CONST()関数の強制性が誤って評価されました。(Bug #26319675)

● オプティマイザが値をフェッチするために生成された列のインデックスを選択した時、誤った結果が発生する可能性がありました。(Bug #24345509、Bug #29451999)

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

MySQL Editions

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

MySQL Editionsの詳細