2022.02.07

MySQL

MySQL Community Server 5.7.37 GA版(リリース日:2022年1月18日)

主な変更点

■ 監査ログ関連

● 以前は、MySQL Enterprise Auditによってログに記録された各イベントには、SQLステートメントのリテラルテキストが含まれていました。(ステートメントに機密情報が含まれている可能性があるので)代替案を提供するために、監査ログフィルタリング言語は、リテラルテキストではなくステートメントのダイジェストをログに記録することをサポートするようになりました。
 例えば、このステートメントをログに記録する代わりに、
   SELECT * FROM orders WHERE some_sensitive_column=1234567
 監査ログプラグインは、このダイジェストをログに記録できます。
   SELECT * FROM `orders` WHERE `some_sensitive_column` = ?
 これは、実際のデータ値ではなくパラメータマーカーが表示される、プリペアドステートメントについてすでにログに記録されているものと似ています。
 ダイジェストロギングを実行するためには、ステートメントリテラルテキストをそれに対応するダイジェストに置き換える監査フィルター定義を使用します。
 テキストの置換は監査の初期段階(フィルタリング中)で行われるため、ステートメントのリテラルテキストまたはダイジェスト値をログに記録するかどうかの選択は、後で書き込まれるログ形式(つまり、監査ログプラグインがXMLまたはJSON出力を生成するかどうか)に関係なく適用されます。(バグ #31482609)

■ コンパイル関連

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

■ SQL関数と演算子関連

● MBRContains()関数を使用するクエリでは、使用可能な全ての空間インデックスが使用されていませんでした。(バグ #32975221)
 参照:この問題は、バグ #29770705のリグレッションです。
● FORMAT()関数は、es_ESまたはes_MXロケールのいずれかが指定されている場合、千単位の区切り文字を表示せず、区切り文字間のグループ化を行わずに、フォーマットされた数値を返しました。(バグ #31374305)

■ パッケージ関連

● MySQLのダウンロード可能なパッケージの署名に使用されるGnuPGビルドキーが更新されました。以前のGnuPGビルドキーは2022-02-16に期限切れになるように設定されています。
 GnuPGキーの更新により、repo.mysql.comを使用するように設定されたシステムは、aptまたはyumを使用してMySQL 5.7.37以降またはMySQL 8.0.28以降にアップグレードする時に署名検証エラーを報告する場合があります。この問題を解決するためには、次のいずれかの方法を使用してください。
  a. https://dev.mysql.com/downloads/からMySQL APTまたは
   YUMリポジトリセットアップパッケージを手動で再インストールします。
  b. MySQL GnuPG公開鍵をダウンロードし、それをシステムGPGキーリングに追加します。
 (バグ #33587308)

■ 主なバグ修正

● InnoDB:InnoDBソースのbuf_validate()関数が最適化され、デバッグビルドのパフォーマンスが向上しました。
 (バグ #33417058、バグ #104967)
● パーティショニング:生成された列式で非決定的な関数を使用してテーブルを作成することはできないはずですが、これは全ての場合に強制されたわけではありませんでした。一連の1つ以上のALTER TABLEステートメントを使用して、1つ以上のそのような生成された列を持つパーティションテーブルに到達することができます。このテーブルに対してSHOW CREATE TABLEを実行することにより取得したCREATE TABLEステートメントを実行しようとすると、MySQLは、パーティション式自体は有効であるにもかかわらず、問題のある列ではなくパーティション式を参照する誤解を招くエラーメッセージでステートメントを拒否しました。
 これは、(内部変数 thd->safe_to_cache_queryで)生成された列に対して定義された安全でない式をチェックした結果が原因でした。これは、パーティション式の解析中にクリアされずに後で再度チェックされたため、パーティション式が問題のある生成された列式を参照していなくてもエラーが発生しました。このような場合、パーティション関数を解析する前に、thd->safe_to_cache_queryをリセットするようになりました。
 生成された列で特定の非決定関数(AES_ENCRYPT()、AES_DECRYPT()、RANDOM_BYTES())の使用を許可する問題は、個別に処理されます。(バグ #29268656)
 参照:バグ #32592320。
● パーティショニング:パーティショニングされたテーブルのプライマリキー以外のインデックスを使用したクエリでは、CPUの負荷が高くなることがありました。(バグ #104576、バグ #33238010)
● レプリケーション:レプリカサーバーでPAD_CHAR_TO_FULL_LENGTH SQLモードが有効になっていると、レプリケーションメタデータリポジトリテーブルのレプリケーションチャネルの名前に末尾のスペースが追加され、そのデータを使用してチャネルを識別するレプリケーション操作でエラーが発生する可能性がありました。この問題は、MySQL 8.0では文字の列にVARCHARを使用することで修正され、MySQL 5.7ではこれらのテーブルから読み取る時にSQLモードを無効にすることで修正されました。(バグ #33213841)
● MySQL 5.7は、MySQL 5.6またはMySQL 8.0と同じ方法でthread_stack変数を処理しませんでした。(バグ #33362907)
● 場合によっては、SERIALタイプの生成された列を作成することが可能でしたが、これは許可されていません。
 (バグ #33141966)
● トランザクションを暗黙的または明示的にコミットするステートメントは、トリガーまたはストアドファンクション内では許可されていません。この場合、CREATE TRIGGERとCREATE FUNCTIONの両方がエラー(ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG)を報告する必要がありますが、DROP TABLESPACEを正しく処理しませんでした。(バグ #33141958)
● オンラインキーリングの移行に使用されたMySQLセッションは、移行の完了後に正常に閉じられなかったため、“Aborted connection”というメモがエラーログに出力されました。(バグ #32989716)
● SHOW PROCESSLISTは、プリペアドステートメントを削除するプロセスにあった接続に属するクエリ文字列にアクセスする時に、解放されたメモリを読み取る可能性がありました。(バグ #28142052)
● ALTER USER ... IDENTIFIED WITH ... BYの権限が正しくチェックされませんでした。(バグ #27923149、バグ #29882299)

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

MySQL Editions

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

MySQL Editionsの詳細