2020.01.22

MySQL

MySQL 5.7.29 GA版(リリース日:2020年1月13日)

主な変更点

■ 監査ログ関連

● ANALYZE TABLEステートメントは、現在、読み取り監査イベントを生成します。 (Bug #29625461)

■ 主なバグ修正

● InnoDB:MySQLをGCC 9.2.0でコンパイルする時、os_file_get_parent_dir警告が発生しました。 (Bug #30499288, Bug #97466)

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

● InnoDB:比較関数は、空間インデックスの非リーフページをマージしようとした時に、2つのレコードが等しいことを検出しました。その関数はこの予期しない状態を処理できなかったため、長いセマフォ待機と最終的アサーションエラーが発生しました。 (Bug #30287668)

● InnoDB:異なるDATA DIRECTORY句を使用して定義されたソーステーブルとデスティネーションテーブルが原因で失敗したテーブルスペースインポート操作は、説明が不十分なスキーマの不一致エラーを報告しました。さらに、.cfgファイルが存在しない場合、同じ操作でアサーションエラーが発生します。現在は、データディレクトリの不一致が原因でインポート操作が終了する前に、より詳細なエラーメッセージが両方のケースで報告されます。 (Bug #30190199, Bug #30190227, Bug #20644698, Bug #76142)

● InnoDB:修正レコードが修正ツリー構造を必要とするかどうかを検出するbtr_cur_will_modify_tree()関数で使用される基準が不十分でした。 (Bug #30113362)

● InnoDB:ALTER TABLE ... DISCARD TABLESPACE操作により、ハング状態が発生しました。 (Bug #29942556, Bug #30324703)

● InnoDB:セッション一時テーブルのセカンダリインデックスロックの不要な暗黙的から明示的への変換を禁止することによって、コードのリグレッションに対処しました。 (Bug #29718243)

● InnoDB:削除マークの付いたレコードのパージ中に破損したページにカーソルが置かれた時、テーブルスペースのインポート操作でアサーションが発生しました。破損したページが検出された時にアサートする代わりに、現在はインポート操作が終了し、エラーが報告されます。 (Bug #29454828, Bug #94541)

● レプリケーション:メンバーがレプリケーショングループに参加または再参加する時、グループレプリケーションが(参加メンバーが既存のオンラインメンバーから状態転送を受信する)分散リカバリプロセスでエラーを検出した場合、新しいドナーに自動的に切り替わり、状態転送を再試行します。参加メンバーが中断前に再試行する回数は、group_replication_recovery_retry_countシステム変数によって設定されます。パフォーマンススキーマテーブルreplication_applier_status_by_workerには、最後の再試行の原因となったエラーが表示されます。以前、このエラーは、グループメンバーが並列レプリケーションアプライヤスレッド(slave_parallel_workersシステム変数で設定)で設定されている場合にのみ表示されました。グループメンバが単一のアプライヤスレッドで設定されている場合、エラーは、内部のRESET SLAVE操作による再試行の度にクリアされたため、表示されませんでした。これは、単一または複数のアプライヤスレッドがあったかどうかに関係なく、SHOW SLAVE STATUSコマンドの出力にも当てはまりました。RESET SLAVE操作は、現在、分散リカバリの再試行後に実行されなくなりました。そのため、最後の再試行を引き起こしたエラーは常に表示されることが可能です。 (Bug #30517160, Bug #30517172)

● レプリケーション:障害が発生したレプリケーショングループメンバーがマイノリティグループに再参加しようとし、それが許可されなかった時、メモリリークが発生する可能性がありました。 (Bug #30162547, Bug #96471)

● レプリケーション:レプリケーションスレーブが、マスターログファイル名とマスターログの位置を指定しないCHANGE MASTER TOステートメントを使用してセットアップされ、それからSTART SLAVEが発行される前にシャットダウンし、それからオプション--relay-log-recoveryセットで再起動した場合、レプリケーションは開始しませんでした。これが発生したのは、受信スレッドがリレーログのリカバリが試行される前に開始されていなかったために、マスターログファイル名とマスターログの位置を提供するログローテーションイベントがリレーログで使用できなかったからです。この状況で、スレーブは現在はリレーログのリカバリをスキップして警告を記録し、その後レプリケーションの開始に進みます。 (Bug #28996606, Bug #93397)

● レプリケーション:GTIDがレプリケーションマスターとスレーブで有効になっており、スレーブがMASTER_AUTO_POSITION=1オプションが設定されたマスターに接続している場合、マスターは、スレーブがまだ受信していない、コミットしていない、または両方していないすべてのトランザクションをスレーブに送信する必要があります。マスターによって送信されるべきトランザクションのいずれかがマスターのバイナリログから既に削除されている場合、マスターはエラーER_MASTER_HAS_PURGED_REQUIRED_GTIDS(1789)をスレーブに送信し、レプリケーションは開始されません。

 エラーER_MASTER_HAS_PURGED_REQUIRED_GTIDSに対して提供されるメッセージは、この状況での正しいアクションに関するアドバイスを提供するために変更されました。これは、スレーブが別のソースから欠落しているトランザクションをレプリケートするため、または、スレーブがより最近のバックアップから作成された新しいスレーブに置き換えられるようにするためです。このメッセージは、将来その状況を回避するために、マスターのバイナリログの有効期限を修正できることを通知します。さらに、欠落しているGTIDを手動で計算する必要がないように、マスターはパージされたトランザクションのGTIDを識別し、それらを警告メッセージER_FOUND_MISSING_GTIDS(11809)でエラーログに提供します。 (Bug #26004541, Bug #29769293)

● macOS:macOSでは、-DWITH_SSL=systemでMySQLを設定すると、mysql_config出力に静的SSLライブラリの内部CMake名が誤って含まれました。 (Bug #30541879, Bug #97632)

● DockerパッケージにLDAP認証プラグインがありませんでした。 (Bug #30465247)

● 派生テーブルのフィールドの元のテーブル名は、常に正しく表示されるわけではありませんでした。 (Bug #30362898)

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

● MySQLインストーラーは、Windows Server 2012でMySQL 5.7をアンインストールできませんでした。 (Bug #30323924, Bug #96940)

● 複数のセッションがAUTO_INCREMENT列を持つテーブルに同時INSERT ... ON DUPLICATE KEY UPDATEステートメントを実行しているが、AUTO_INCREMENT値を指定していない場合、挿入は一意のインデックスの違反により失敗する可能性がありました。 (Bug #30194841, Bug #96578)

● lower_case_table_names=2の場合、SHOW TABLESは大文字の名前を持つテーブルの表示に失敗する可能性がありました。 (Bug #29957361)

● サーバーの起動時にコマンドラインでkeyring_encrypted_file_passwordを設定すると、パスワードの値がシステムユーティリティに表示される可能性がありました。 (Bug #29848634)

● LOCK TABLESステートメントを有効にすると、ロックされたテーブルのメタデータの変更により、パフォーマンススキーマまたはセッション変数に対するSHOWクエリがopening_tables状態でハングする可能性がありました。 (Bug #29836204, Bug #92387)

● A AND (B OR C [OR ...])形式のWHERE条件を使用したSELECTは、不可能な範囲になり、サーバーが予期せずに終了しました。 (Bug #29770705)

● JSON形式の監査ロギングの場合、現在はidフィールドに65535より大きな値が含まれることが可能です。以前は、ログアクティビティが活発な場合、1秒に65536より多くのクエリを実行できました。これは、id値に許可された16ビットを超えています。 (Bug #29661920)

● 接続パケットが不完全な場合、クライアントは認証プラグイン名を適切に初期化できませんでした。 (Bug #29630767)

● libmysqlclient Cクライアントライブラリを使用したクライアントプログラムは、不正なセッショントラッキング情報を含むOKパケットを受信すると終了する可能性がありました。 (Bug #29297620, Bug #29630735)

● 特定の条件下で、read_onlyまたはsuper_read_onlyシステム変数を有効にしても、SUPER権限のないユーザーによって実行される同時DDLステートメントがブロックされませんでした。 (Bug #28438114, Bug #91852)

● 設計上、mysqlpumpは、無効なビューを含むデータベースはダンプせずに、終了します。しかし、無効なビューは存在するがダンプされるデータベースのいずれにも存在しない場合でも失敗します。 (Bug #27096081)

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

MySQL Editions

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

MySQL Editionsの詳細