2021.10.27

MySQL

MySQL Community Server 5.7.36 GA版(リリース日:2021年10月19日)

主な変更点

■ セキュリティ関連

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

■ 主なバグ修正

● 互換性のない変更:ビューの全てのSELECTステートメントについて、クエリダイジェストはビュー定義に基づいていました。その結果、異なるクエリは同じダイジェストを持ち、パフォーマンススキーマテーブル events_statements_summary_by_digestに集約されたため、そのテーブルの統計は、個別のSELECTステートメントを区別するために使用できませんでした。
 ビューの各SELECTステートメントのクエリダイジェストは、ビュー定義ではなくSELECTに基づくようになりました。これにより、events_statements_summary_by_digestテーブル内の個別のSELECTステートメントを区別することができます。ただし、クエリダイジェストを使用するツールでは、この変更を考慮して調整が必要になる場合があります。例えば、MySQL Enterprise Firewallおよびクエリ書き換えプラグインはクエリダイジェストに依存しており、ビューに関連付けられているそれらの既存のルールを更新する必要がある場合があります。(バグ #27540213、バグ #89559、バグ #31761802)
● InnoDB:UNDOログの切り捨てを有効にすると(innodb_undo_log_truncate=ON)、MySQL5.6からMySQL5.7.34以前にバージョンアップグレードした後にUNDOログの切り捨て操作が開始されると、デッドロックと最終的なエラーが発生する可能性がありました。MySQL 5.7.35で導入されたパッチ(バグ #32800020)は、MySQL5.6からMySQL5.7.35以降への直接アップグレードのデッドロックの問題に対処しましたが、MySQL5.7.35以降にアップグレードされる前にMySQL5.6からMySQL5.7.34以前にアップグレードされたインスタンスでは問題が解決しませんでした。この問題に対処するために、問題のある5.7.2より前のロールバックセグメントスロットが識別され、起動時にリセットされ、次のようなメッセージがエラーログに書き込まれるようになりました。
   [Note] InnoDB: Found duplicate reference rseg: 33 space: 1 page: 3
   [Note] InnoDB: Reset pre-5.7.2 rseg: 1 after duplicate is found.
 5.7.2より前のロールバックセグメントスロットにパージするUNDOデータがない場合、次のようなメッセージが出力されます。
   [Note] InnoDB: Successfully reset 32 pre-5.7.2 rseg slots.
 5.7.2より前のロールバックセグメントスロットでUNDOデータが見つかった場合は、遅いシャットダウンと再起動を推奨する次のようなメッセージが表示されます。
   [Note] InnoDB: pre-5.7.2 rseg: 2 holds data to be purged.
   History length: 1. Recommend slow shutdown with innodb_fast_shutdown=0 and restart
 (バグ #33181859)
● InnoDB:アクティブなトランザクションによる使用中にUNDOテーブルスペースが切り捨てられると、アサーションエラーが発生しました。トランザクションは完了として時期尚早にマークされ、切り捨て操作が可能になりました。(バグ #33162828)
● InnoDB:親テーブルから行を削除または更新すると、仮想列の値をNULLに設定する子テーブルに対するカスケードSET NULL操作が開始されました。仮想列の値は、基本列の値から派生している必要があります。
 (バグ #33053297)
● InnoDB:InnoDBリカバリプロセスは、リカバリ中のデータにページ圧縮が適用されたことを認識しなかったため、REDOログの適用フェーズ中にテーブルスペースデータファイルのサイズが大きくなり、ディスクがいっぱいの状態に近づいているシステムのリカバリ障害につながる可能性がありました。(バグ #32771259)
● レプリケーション:自動測位に必要なGTIDが削除された時にMySQLレプリケーションによって発行されるエラーメッセージは、状況によっては誤って割り当てられたり、スクランブルされたりする可能性がありました。(バグ #32965864)
● レプリケーション:mysqldumpを使用して取得したダンプを復元した後、gtid_executedおよびgtid_purged GTIDセットの内容が永続化されませんでした。ダンプファイルのシーケンスが変更され、gtid_purged GTIDセットが書き込まれた後にmysqlスキーマ(mysql.gtid_executedテーブルを含む)がドロップされないようになりました。mysqldumpに新しいオプション --skip-mysql-schemaが追加され、mysqlスキーマを全く削除しないことを選択できるようになりました。(バグ #32843447)
● JSON:JSON値をテキストに変換すると、宛先文字列が直線的に増加し、不必要に多くの再割り当てが発生しました。現在、このプロセスでは、代わりに指数関数的成長を使用して、必要な割り当ての数を減らしています。
 この修正は元々MySQL 8.0に登場し、Annirudh PrasadによってMySQL 5.7にバックポートされました。(バグ #103790、バグ #32919524)
 参照:バグ #28949700。
● フルテキストインデックスを持つ複数のテーブルでの同時挿入操作により、多数のフルテキストインデックス同期要求が発生し、メモリ不足状態が発生しました。(バグ #32831765、バグ #103523)
● クエリが集計に一時テーブルを使用する場合、group by項目は一時テーブルの一意の制約として使用されます。その項目の値がすでに存在する場合、行が更新されます。それ以外の場合は、新しい行が一時テーブルに挿入されます。その項目に結果フィールドまたは参照項目がある場合は、2回評価されます。1回は結果が一時テーブルに存在するかどうかを確認し、存在しない場合は、挿入する行を作成する時にもう一度評価されます。group by項目が非決定的である場合、存在の確認に使用される結果値が挿入が試行された結果値と異なり、値がテーブルに既に存在する場合は挿入が拒否されました。
 非決定性項目のハッシュを一意の制約として使用することでこれを修正し、ハッシュが1回だけ評価されるようにします。(バグ #32552332)
● SHOW GRANTSステートメントの見積もり処理が改善されました。(バグ #31716706)

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

MySQL Editions

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

MySQL Editionsの詳細