2019.02.13

MySQL

MySQL 5.7.25 GA版(リリース日:2019年1月21日)

主な変更点

■ 廃止予定と削除

・resolveipおよびresolve_stack_dumpユーティリティは現在削除予定で、MySQL 8.0で削除されます。
 resolveipの代わりに、nslookupまたはhost、digを使用できます。公式のMySQLビルドからのスタック
 トレースは、常にシンボル化されているので、resolve_stack_dumpを使用する必要はありません。

■ プラガブル認証

・LDAPポート番号が636または3269に設定されている場合、プラグインはLDAPではなく
 LDAPS(LDAP over SSL)を使用するようになりました。ポート番号はシステム変数の
 authentication_ldap_sasl_server_portまたはauthentication_ldap_simple_server_portを
 使用して設定できます。(LDAPSはstartTLSとは異なります。)(Bug#28743563)

・以前は、プロキシを使用したLDAP認証では、LDAP認証プラグインはLDAPサーバーから返された最初の
 グループ名をMySQLプロキシユーザーアカウント名として使用していました。MySQLアカウントの
 認証文字列は、一致するグループのリストを優先順に指定できるようになりました。また、オプションで、
 一致するグループ名を指定されたMySQLプロキシユーザー名にマッピングできるようになりました。

■ セキュリティ関連

・MySQL Commercial Server用のOpenSSLライブラリがバージョン1.0.2qに更新されました。OpenSSLの
 新しいバージョンで修正された問題は、http://www.openssl.org/news/vulnerabilities.htmlで
 説明されています。

 この変更は、Oracleが作成したMySQL ServerのMySQL Communityビルドには影響しません。これは、
 代わりにyaSSLライブラリを使用します。(Bug #28988091)

■ 追加・変更された機能

・Microsoft Windows: MySQLサーバーによって作成された名前付きパイプでクライアントに与えられる
 アクセスコントロールは、Windows上で通信を成功させるために最低限必要なものに設定されています。
 新しいMySQLクライアントソフトウェアは、追加の設定なしで名前付きパイプ接続を開くことができます。
 古いクライアントソフトウェアをすぐにアップグレードできない場合は、新しいサーバーシステム変数
 named_pipe_full_access_groupを使用して、名前付きパイプ接続を開くために必要な権限を
 Windowsグループに付与できます。フルアクセスグループのメンバーシップは制限された一時的なものに
 する必要があります。

■ バグ修正

・InnoDB: ダングリングポインタによって、メモリリークが発生しました。(Bug #28693568)

・InnoDB:外部キー制約とインデックス付き仮想列を持つテーブルに対するON DELETE CASCADE操作に
 より、サーバーが終了しました。(Bug#28470805)

・InnoDB:仮想列の値を含む誤って書かれたDMLログがアサーションを起こしました。(Bug#28448853)

・InnoDB:O_DIRECT_NO_FSYNC innodb_flush_method設定を使用すると、ファイルシステムの
 メタデータが非同期になるためにシステムがハングアップする可能性があります。この問題が
 O_DIRECT_NO_FSYNCモードで発生しないようにするために、InnoDBは新しいファイルの作成後、
 ファイルサイズの拡大後、および、ファイルを閉じた後に、fsync()を呼び出すように
 なりました。fsync()システムコールは各書き込み操作の後にまだスキップされます。

 上記で説明された変更により、O_DIRECT_NO_FSYNCモードをEXT4およびXFSファイルシステムで安全に
 使用できるようになりました。(Bug#27309336)

・InnoDB:64ビットのWindowsシステム上でサイズが4GBを超えるテーブルスペースファイルに
 書き込もうとすると、アサーションが発生しました。このエラーはナローイング変換が原因でした。
 (Bug#26636815、Bug#87423)

・パーティショニング:BLOB列またはTEXT列を含む分割テーブルに対してALTER TABLEステートメントを
 繰り返すと、正しく処理されないことがありました。(Bug#28491099)

・パーティショニング:分割テーブルにDATA DIRECTORYオプションを使用した分割定義が1つ以上
 ある場合、ALTER TABLE ... EXCHANGE PARTITIONは機能しませんでした。この修正は、
 InnoDBストレージエンジンのみを使用している分割テーブルをサポートします。(Bug#19730200)

・レプリケーション:バイナリログのROLLBACK TO SAVEPOINTステートメントの識別子の引用符の
 処理を修正するためのパッチは、その後のMySQLバージョンには正しく適用されませんでした。
 (Bug #28569645)

・レプリケーション:MySQL 5.7.23のパッチ適用後、その後のリリースで、LOAD DATAステートメントは
 MySQL 5.7.22のマスターからレプリケーションスレーブへのステートメントベースの
 レプリケーションを停止しました。この問題は修正されました。(Bug #28541204, Bug #92132)

・レプリケーション:状況によっては、マスタ情報ログがテーブル(master_info_repository = TABLE)
 からファイル(master_info_repository = FILE)に変更された場合、
 CHANGE MASTER TOステートメントをレプリケーションスレーブに対して使用できませんでした。
 (Bug #28529558)

・レプリケーション:システム変数binlog_transaction_dependency_trackingおよび
 binlog_transaction_dependency_history_sizeを設定または読み込みした時、必要なロックの
 タイプによっては、アクティブなバイナリログを処理するためにも同じロックが必要とされたため、
 デッドロックシナリオが発生する可能性がありました。現在、代わりに新しいロックタイプが
 トランザクション依存関係追跡システム変数へのアクセスに使用されるため、このデッドロックは
 発生しません。(Bug #28511326, Bug #91941, Bug #28537209, Bug #92108)

・レプリケーション:PURGE BINARY LOGS TO 'log_name'ステートメントは、mysqlbinlogmoveを
 使用して別の場所に移動されたバイナリログファイルに対して、失敗しました。
 そのようなファイルは、バイナリログインデックスファイルに今もリストされていますが、
 バイナリログファイルが通常保存されているディレクトリとの相対パスではなく、絶対パスを
 使用してリストされています。MySQL Serverは、現在、移動したバイナリログファイルを
 正常に検索して削除できます。(Bug #28284624)

・レプリケーション:GTIDが使用されていてsuper_read_only=ONが設定されている
 レプリケーションスレーブまたはグループレプリケーションのグループメンバーに対して
 autocommitが0に設定されている場合、サーバーのシャットダウンは完了しなかった
 トランザクションによって妨げられました。トランザクションはGTIDをmysql.gtid_executed
 テーブルに保存しようとしましたが、super_read_only=ONが設定されているため、
 更新は失敗しました。(autocommitを1に設定すると、この状況でトランザクションは完了し、
 代わりにmysql.gtid_executedテーブルはサーバーの起動時に更新されます。)
 現在、super_read_only設定のチェックはこのタスクでスキップされるので、トランザクションは
 GTIDをmysql.gtid_executedテーブルに保存し、super_read_onlyとautocommitの設定の
 組み合わせに関係なく完了します。(Bug #28183718)

・レプリケーション:gtid_nextの値が手動で設定された時に、未知のトランザクション識別子に対して
 XA ROLLBACKステートメントが発行された場合、デバッグビルドでアサーションが発生しました。
 現在、XA ROLLBACKステートメントがエラーで失敗した場合、サーバーはGTID状態を更新しようと
 しません。(Bug #27928837, Bug #90640)

・レプリケーション:既存のすべてのリレーログファイルの合計サイズ(Relay_Log_Space)に対して
 SHOW SLAVE STATUSステートメントで返される値は、リレーログファイルが使用する実際の
 ディスク容量よりもはるかに大きくなる可能性があります。I/Oスレッドは、値を更新している間、
 変数をロックしなかったので、SQLスレッドは、I/Oスレッドが値の更新を終了する前に、
 リレーログファイルを自動的に削除し、減少した値を書き込む可能性があります。その後、
 I/Oスレッドは、SQLスレッドの更新を無視し、削除されたファイルのスペースを戻して追加して、
 元のサイズ計算を書き込みます。現在、同時更新を防ぎ、正確な計算を保証するために、
 Relay_Log_Space値は更新中ロックされます。(Bug #26997096, Bug #87832)

・レプリケーション:レプリケーションスレーブのバックアッププロセスによって
 リレーログインデックスファイルが一時的に表示用にロックされており、MySQLサーバーが
 その時点で名前変更または削除操作のためにファイルにアクセスしようとした場合、
 バックアップは警告付きで完了しましたが、MySQLサーバーは予期しない停止を経験しました。
 現在、MySQLサーバーは、これまたは類似のシナリオが原因で、ファイルが間もなく再び
 使用可能になる場合に、ファイルアクセス操作を何度も再試行します。(Bug #25839610)

・レプリケーション:sync_binlog=1が設定されている時、バイナリログがバイナリログの終了位置が
 更新される前にコミット中にローテーションされた場合、サーバーは新しいバイナリログファイルで
 古いバイナリログの終了位置を使用しようとしたために、レプリケーションはスレーブで停止しました。

 現在、サーバーは、バイナリログの終了位置を更新する時に、バイナリログファイル名とアクティブな
 バイナリログファイルを比較するので、その問題は発生しません。
 (Bug #22252394, Bug #25524203, Bug #84752)

・レプリケーション:新しいメンバーをグループに追加する時、証明情報が大きすぎて送信できない場合、
 すべてのグループメンバーに障害を引き起こすイベントが生成されました。この状況を回避するために、
 現在、認証情報が大きすぎる場合、エラーが発生し、参加メンバーをグループから離脱させます。
 (Bug#93130、Bug#91870、Bug#28900691、Bug#28443958)

・レプリケーション:レプリケーションを停止すると、トランザクションを保留していたチャネルが
 グループレプリケーションでデッドロックを引き起こす可能性があります。
 (Bug#92376、Bug#28636768、Bug#28365855)

・keyring_awsプラグインは、macOS用の商用パッケージにありませんでした。

 このプラグインでサポートされているmacOSのバージョンは、macOS 10.13と10.14です。
 (Bug #29051838)

・audit_logプラグインがインストールされている場合、MySQL Enterprise Firewallはうまく
 機能しませんでした。(Bug#28930885、Bug#93184)

・サーバーがREDOログファイルと同じ名前のデータベースの作成を許可したため、予期しない
 サーバー動作が発生する可能性があります。このような名前はデータベース名としては
 許可されなくなりました。(Bug#28867993)

・別のlibtirpcライブラリにするため、glibcからSun RPC and XDRを削除したため、
 プラットフォームによってはlibasanで問題が発生しました。
 (Bug#28785835、Bug#92762、Bug#28897799、Bug#93116)

・メモリリークは、同じユーザーレベルのロックを保持している同時接続が原因で失敗した
 ゼロタイムアウトでのGET_LOCK()の呼び出しによって引き起こされました。(Bug#28714367)

・mysqlpumpは、エラーが発生した時にすべての割り当てられたリソースを解放しなかったため、
 メモリリークが発生しました。(Bug#28538971、Bug#92131)

・デバッグビルドの場合、CREATE USERステートメントをロールバックしようとするとサーバーが
 終了することがありました。(Bug #28536312)

・廃止予定のシステム変数を誤って処理すると、パフォーマンススキーマの
 variables_by_threadテーブルに対するクエリからの出力が正しくなくなる可能性があります。
  (Bug#28515475、Bug#92049)

・サブクエリにUNIONが含まれる場合、サブクエリの列の数のカウントが正しく計算されませんでした。
 (Bug #28499924)

・GTID対応サーバーでは、INFORMATION_SCHEMA.COLUMNSテーブルに対する同時ステートメントが
 デッドロックすることがありました。(Bug #28293047, Bug #91548)

・memcmp()関数を使用して文字列としてログファイル名を比較すると、初期化されていない
 メモリ読み取りエラーが発生しました。現在、この比較はstrncmp()関数を使用します。
 (Bug #28178776, Bug #90238)

・複合インデックスの2番目の列に対してLIKE句を使用したINNER JOINを実行した時、
 オプティマイザーはその2番目の列をスキップしました。(Bug#28086754)

・CREATE TABLE ... SELECTは、デフォルト値なしで作成したはずの日付列をデフォルト値"ゼロ"日で
 作成することがありました。(Bug#28022129)

・INサブクエリ述部のセミジョインへの変換は、非常に多くのテーブルで正しく処理されませんでした。
 (Bug#28004674)

・サーバーがSIGHUP信号を誤って処理すると、サーバーが終了する可能性があります。
 (Bug #27966483, Bug #90742)

・一方の文字列比較オペランドの文字セットが他方のオペランドの文字セットのスーパーセットである時、
 「小さい」文字セットを持つオペランドを「大きい」文字セットに変換することによって
 許可されるはずの比較が許可されませんでした。utf8mb4とutf32は、他のエンコーディングの
 スーパーセットと見なされます。(Bug #27897053, Bug #25642319, Bug #85224)

・アカウント管理ステートメントによる不適切なメモリー処理は、サーバーの誤動作の原因となる
 可能性があります。(Bug #27820277)

・多数のプレースホルダーを持つ複数行の挿入を実行するために準備済みステートメントを実行すると、
 過剰なメモリーが消費され、実行が遅くなる可能性がありました。(Bug #27703912)

・パーサーは、サーバーが終了する可能性のあるトリガー定義内の無効なSETステートメント構文を
 受け入れました。(Bug#27595603)

・keyring_encrypted_fileプラグインキーリングファイルが無効な場合、
 サーバーは起動できませんでした。(Bug#27588064)

・CURSOR_TYPE_READ_ONLYフラグを設定したプロシージャー呼び出しで準備済みステートメントを
 実行する時、プロシージャーが空の結果セットを返すSELECTを実行した場合、
 クライアントライブラリーはハングしました。(Bug#27443252、Bug#89214)

・パーサーは、いくつかのメモリー不足チェックを誤って実行しました。(Bug #25633994)

・IGNOREを使用したDMLステートメントは、生成された列を持つテーブルで常に正しく
 処理されませんでした。(Bug#22990029)

・ダイナミックレンジとインデックスマージを使用するクエリは、予想よりも多くのメモリを
 使用する可能性があります。(Bug #89953, Bug #27659490)

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

MySQL Editions

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

MySQL Editionsの詳細