![]() |
![]() |
MySQL 5.5.28 リリースノート (日本語翻訳)
監査ログプラグインに関する注意
・ MySQLEnterpriseEditionのサブスクリプションには、MySQLEnterpriseAuditが含まれるようになった。これは audit_log というサーバプラグインを使用して実装される。MySQLEnterpriseAuditはMySQLAuditのオープンAPIを使用しており、特定のMySQLサーバで実行される接続とクエリの動作について、標準でポリシーベースのモニタリングとロギングを可能にする。Oracleの監査仕様に対応して設計されたMySQLEnterpriseAuditは、特別な設定を必要とせず簡単に使える監査およびコンプライアンスのためのソリューションであり、社内と社外両方の法規制によるガイドラインにより管理されるアプリケーションに利用できる。
audit_log プラグインをインストールすると、サーバのアクティビティに関する監査レコードを含むログファイルがMySQLServerで生成されるようになる。このログには、クライアントの接続および切断の日時、アクセス先のデータベースやテーブルなど、接続中に実行された操作が記録されている。
詳細については、 6.3.10項「MySQLEnterpriseAudit」 を参照。
機能の追加と変更
・ スレッドプールプラグインの内部インタフェースが変更された。旧バージョンのプラグインは現在のバージョンのサーバで動作するが、5.5.28より古いバージョンのサーバは現在のバージョンのプラグインでは動作しない。
修正されたバグ
・ InnoDB :MySQL5.6で最初に導入された information_schema テーブルの一部が、MySQL5.5とMySQL5.1でも使用可能になった。該当するテーブルは、 INNODB_BUFFER_PAGE 、 INNODB_BUFFER_PAGE_LRU 、および INNODB_BUFFER_POOL_STATS (Bug#13113026)。
・ InnoDB : SELECT... FORUPDATE 、 UPDATE 、またはその他のSQLステートメントが、 WHERE 句で < または <= 演算子を使用して InnoDB テーブルの行をスキャンするとき、対象となる範囲の次の行もロックされる可能性があった。この問題によって、ロックされないはずの行でロック待機のタイムアウトが発生することがあった。この問題は、 READCOMMITTED や REPEATABLEREAD などさまざまなアイソレーションレベルで発生していた(Bug#11765218)。
・ パーティショニング : PARTITIONBYHASH または PARTITIONBYKEY を使用するテーブルで、パーティションの取り除きメカニズムに問題があった。パーティショニングキーからのカラムを使用するマルチレンジのリストまたは不等式が出現した場合に、取り除きメカニズムが続行され、前のカラムが使用されなかった場合であっても、次のパーティショニングカラムを取り除きに使用しようとした。これが原因で、前のパーティショニングカラムの1つ以上に一致するはずだったパーティションが取り除かれることになり、パーティショニングキーの最後のカラムのみに一致するパーティションが残った。
この問題は、以下の条件が両方とも満たされる場合に発生していた。
1. テーブルのパーティショニングキーを構成するカラムが、カラム定義と、 SELECT ステートメントの WHERE 句によるパーティショニングキー定義とで同じ順序で使用されている場合。
2. パーティショニングキーの最後のカラムで使用される WHERE 条件を満たす値は1つだけだが、パーティショニングキーのそれより前のカラムをテストする条件を満たす値は一定範囲に複数ある場合。
パーティションドテーブルを作成するステートメントと、そのテーブルに対して上記の問題が発生したクエリの例を以下に示す。
CREATE TABLE t1 ( c1 INT, c2 INT, PRIMARY KEY(c2, c1) ) PARTITION BY KEY() # Use primary key as partitioning key PARTITIONS 2; SELECT * FROM t1 WHERE c2 = 2 AND c1 <> 2;
この問題を解決するために、取り除きに使用できないパーティションキーカラムが見つかった場合には、パーティション取り除きが残りのパーティションキーカラムを無視するようにした(Bug#14342883)。
・ パーティショニング :ソート読み込みに使用される各パーティションから現在読み込まれている行のためのバッファは、オープンに割り当てられ、パーティショニングハンドラがクローズまたは破棄されるときにのみ解放されていた。多数のパーティションと大きい行を含むテーブルに対してSELECTステートメントを使用すると、この問題が原因でサーバがきわめて大量のメモリを消費する可能性があった。
この問題に対処するために、パーティションドテーブルからの読み込みバッファは必要なときにのみ割り当てられ、不要になった時点でただちに解放されるようになっている。この修正の一環として、メモリの割り当ては現在、取り除かれていないパーティションの行からの読み取りに対してのみ行われる( 18.4項「PartitionPruning」 を参照)(Bug#13025132)。
参考:Bug#11764622、Bug#14537277も参照。
・ レプリケーション :64ビットWindowsプラットフォームで、システム変数 max_binlog_cache_size および max_binlog_stmt_cache_size の値が4Gより大きい場合に、4Gに切り捨てられていた。そのため、 max_binlog_cache_size が4Gより大きい値に設定されていても、 LOADDATAINFILE は4Gより大きいサイズのファイルのロードを試行したときに失敗していた(Bug#13961678)。
・ レプリケーション : --log-slave-updates を有効にしたマスタ-マスタレプリケーションで、ユーザ変数を設定してからこの変数を使って挿入を実行すると、 SHOWSLAVESTATUS の出力で Exec_master_log_position カラムが更新されない可能性があった(Bug#13596613)。
・ RPM仕様ファイルは、新しいバイナリに対しても、それをパッケージングする前にテストスイートを実行するようになった(Bug#14318456)。
・ libmysqlclient_r クライアントライブラリが yaSSL からエクスポートするシンボルは、OpenSSLと競合する。プログラムがこのライブラリと libcurl にリンクされている場合、セグメンテーションエラーでクラッシュする可能性があった(Bug#14068244)。
・ LIMIT の引数は整数でなければならないが、プリペアドステートメントでこの引数をプレースホルダによって指定した場合、 '5' のような非整数の値がサーバで拒否されなかった(Bug#13868860)。
・ スレッドプールプラグインが、クライアントセッションで wait_timeout のタイムアウトを優先しなかった(Bug#13699303)。
・ MyISAM テーブルの .frm ファイルと .MYI ファイルでキー定義が異なる場合に、 CHECKTABLE および REPAIRTABLE がクラッシュする可能性があった。現在は、サーバでエラーが生成される(Bug#13555854)。
・ 基礎となるテーブルに2つのカラムでの複合インデックスがあり、かつクエリには列に対する AND 条件が含まれている場合、 FEDERATED テーブルに対するクエリで正しくない結果が返される可能性があった(Bug#12876932)。
・ ビューを含むデータベースに対して mysqlhotcopy がエラーになっていた(Bug#62472、Bug#13006947、Bug#12992993)。
・ --ssl-key オプションの引数は、存在するかどうか、有効なキーかどうかが検証されなかった。生成される接続はSSLを使用したが、キーは使用されなかった(Bug#62743、Bug#13115401)。
・ GROUPBY と ORDERBY を含むクエリに LIMIT 句を追加すると、オプティマイザがクエリを処理する際に誤ったインデックスを選択し、必要以上の行を返す可能性があった(Bug#54599、Bug#11762052)。
・ 標準入力がパイプの場合に、標準入力で mysqlbinlog が入力を受け付けなかった(Bug#49336、Bug#11757312)。