![]() |
![]() |
MySQL 5.1.55 リリースノート (日本語翻訳)
機能の追加または変更:
・ http://dev.mysql.com/downloads/timezones.html に掲載されているタイムゾーン表が更新された。これらの表は、zoneinfoファイルを含まないWindowsやHP-UXなどのシステム上で利用できる(Bug#40230)。
修正されたバグ:
・ パフォーマンス : TABLE_CONSTRAINTS 、 KEY_COLUMN_USAGE 、および REFERENTIAL_CONSTRAINTS の INFORMATON_SCHEMA テーブル内の InnoDB テーブルを含むクエリが必要以上に遅かった。それは、特に多くの外部キーが存在している場合に、必要な回数以上に統計が再チェックされていたためである。今回の改善は、多数のサーバや何千ものテーブルをMySQLEnterpriseMonitorで監視しているユーザに特に有用となるだろう(Bug#43818、Bug#11752585)。
・ 互換性のない変更 : auto_increment_increment が1よりも大きい場合、バルク挿入によって生成される値がカラムの最大値に達した場合、オーバーフローエラーを生じてラップアラウンドされる可能性があった。
この修正により、自動生成値が BIGINTUNSIGNED の最大値と等しくなることはなくなった。カラムによって受け入れられる場合は、その値を手動で保存することは可能である(Bug#39828)。
・ 重要な変更 : パーティショニング :パーティショニング関数として使用される日付と時刻関数のオペランドのタイプがチェックされるようになり、間違ったタイプの値は許可されなくなった。また、 col が DATE または DATETIME カラムの場合、戻り値が default_week_format システム変数の値に依存するため、 EXTRACT(WEEKFROMcol) も許可されなくなった(Bug#54483)。
Bug#57071も参照。
・ InnoDB ストレージエンジン :NetBSD/sparc64で、コンピレーションの問題が InnoDB のソースコードに影響を及ぼしていた(Bug#59327)。
Bug#53916も参照。
・ InnoDB ストレージエンジン : InnoDB ステータスの出力において、 I/Osum[] の値が間違って非常に大きな数字として表示される可能性があった(Bug#57600)。
・ InnoDB ストレージエンジン :ストアドプロシージャ、ストアドファンクションまたはトリガが、 auto-increment カラムを含む1つの InnoDB テーブルを修正し、自動インクリメントカラムを含む別の InnoDB テーブルを削除した場合に、サーバが表明エラーでクラッシュする可能性があった(Bug#56228)。
・ InnoDB ストレージエンジン :他の接続がBLOB型を含むクエリを実行している間は、 information_schema.innodb_trx テーブルをクエリすることができなかった(Bug#55397)。
・ InnoDB ストレージエンジン : OPTIMIZETABLE ステートメントを実行すると、 InnoDB テーブルの自動インクリメントカウンタがリセットされていた。現在では、このステートメントを実行しても、自動インクリメント値は保持される(Bug#18274)。
・ パーティショニング : ALTERTABLE...PARTITION ステートメントが失敗すると、メモリリークが発生する可能性があった(Bug#56380)。
Bug#46949、Bug#56996も参照。
・ レプリケーション :テンポラリテーブルを使用するセッションを閉じる時に、FailedtowritetheDROPstatementfortemporarytablestobinarylogという誤ったエラーによってバイナリロギングが失敗する可能性があった(Bug#57288)。
・ レプリケーション :デフォルトでは、 AUTO_INCREMENT カラムの値は NULL または0をカラムに挿入することで生成される。 NO_AUTO_VALUE_ON_ZERO をサーバSQLモードに設定すると、0の動作が抑制されるため、 NULL がカラムに挿入された場合のみ生成される。
この動作は、レプリケーションスレーブがステートメントベースのフォーマットでマスタに記録されたイベントを適用する際にも(スレーブのSQLスレッドによって)引き継がれる。しかし、行ベースのフォーマットで記録されたイベントを適用する場合には、 NO_AUTO_VALUE_ON_ZERO が無視され、表明が発行される可能性があった。
この問題を修正するために、 AUTO_INCREMENT カラムの値は、スレーブ上で適用された変更に既に含まれているため、行ベースの行フォーマットで記録されたイベントを適用する場合には生成されなくなった(Bug#56662)。
・ レプリケーション : BINLOG ステートメントがセッション変数の値を修正していたため、point-in-timeリカバリなどの操作において問題が発生する可能性があった。たとえば、外部キー制約を持つ InnoDB テーブルのセットを作成し、データを投入するために、セッションレベルで foreign_key_checks=OFF を設定することに依存する行ベースのバイナリログを再実行する際に、問題が発生していた(Bug#54903)。
・ レプリケーション : mysqlbinlog は、デフォルトのデータベースがイベント間に変更した場合のみ、 USE ステートメントを出力していた。これはたとえば、ユーザが次のステートメントシーケンスを発行した場合に問題を引き起こす可能性があった。
CREATEDATABASEmydb;
USEmydb;
CREATETABLEmytable( column_definitions );
DROPDATABASEmydb;
CREATEDATABASEmydb;
USEmydb;
CREATETABLEmytable( column_definitions );
2つ目の CREATETABLE ステートメントを mysqlbinlog によって再生しようとすると、Error:NoDatabaseSelectedというエラーによって失敗していた。これは、 mydb 以外のデータベースが選択されていないため、2つ目の USE ステートメントが再生されていないからである。
この修正により、 mysqlbinlog は、バイナリログから USE ステートメントを読み取るたびに、 USE ステートメントを出力するようになった(Bug#50914)。
・ レプリケーション :以前は、ステートメントがスレーブ上でマスタ上とは異なるエラーで失敗した場合、スレーブのSQLスレッドが以下を含むメッセージを表示していた。
・マスタのエラーコードに対するエラーメッセージ
・マスタのエラーコード
・スレーブのエラーコードに対するエラーメッセージ
・スレーブのエラーコード
ところが、スレーブにはマスタのメッセージの出力フォーマット指定子を記述するための情報がないため、メッセージ形式の文字列をそのまま表示していた。マスタに表示されるのと同じメッセージが表示されていないことをより明確にするために、スレーブは出力されるマスタの部分をメッセージそのものではなく、メッセージ形式で表示するようになった。例えば以前は、スレーブは次のような情報を表示していた。
Error:"Querycauseddifferenterrorsonmasterandslave.Erroronmaster:
'Duplicateentry'%-.192s'forkey%d'(1062),Erroronslave:
'noerror'(0).Defaultdatabase:'test'.Query:
'insertintot1values(1),(2)'"(expecteddifferenterrorcodesonmasterandslave)
現在では、スレーブは次のメッセージを表示する。
Error:"Querycauseddifferenterrorsonmasterandslave.Erroronmaster:
messageformat='Duplicateentry'%-.192s'forkey%d'errorcode=1062;
Erroronslave:actualmessage='noerror',errorcode=0.Defaultdatabase:
'test'.Query:'insertintot1values(1),(2)'
"(expecteddifferenterrorcodesonmasterandslave)(Bug#46697)
・ レプリケーション :新しいバイナリログファイルの名前の生成時にエラーが発生した場合、エラーは記録されたがユーザには表示されなかった(Bug#46166)。
Bug#37148、Bug#40611、Bug#43929、Bug#51019も参照。
・ MIN( year_col ) が間違った結果を返す場合があった(Bug#59211)。
・ max_allowed_packet が16MB以上に設定された場合、サーバが“Packettoolarge”エラーによって大きすぎるパケットを拒否できなかった(Bug#58887)。
・ 条件のプッシュダウンを使用するクエリにおいて EXPLAINEXTENDED を発行すると、 mysqld がクラッシュする可能性があった(Bug#58553)。
・ GROUP_CONCAT() を使用するクエリにおいて、 EXPLAIN がクラッシュする可能性があった(Bug#58396)。
・ icc でコンパイルする際に、保守用モードで構成を行うとエラーが発生した(Bug#57991、Bug#58871)。
・ コンテキスト内でステートメント準備やビュー作成などの不必要なサブクエリ評価を実行すると、サーバがクラッシュする可能性があった(Bug#57703)。
・ ビューの作成によって、Valgrind警告が発生する可能性があった(Bug#57352)。
・ NULL ジオメトリ値によって、 Item_func_spatial_collection::fix_length_and_dec がクラッシュする可能性があった(Bug#57321)。
・ cp1251 文字セットがユーロ記号( 0x88 )を正しくサポートしていなかった。例えば、 cp1251 の文字を含む文字列を utf8 に変換すると、 utf8 のユーロ記号ではなく '?' となっていた(Bug#56639)。
・ 符号なしシステム変数が負の値として表示される可能性があった(Bug#55794)。
・ CREATEDATABASE および DROPDATABASE によって、 mysql--one-database がステートメントをフィルタリングするコンテキストを管理できなくなった(Bug#54899)。
・ DROPDATABASE と REPAIRTABLE が同時に実行され、 DROPDATABASE がテーブルの.TMDファイルを削除すると同時に、 REPAIRTABLE がその削除されたファイルの詳細を読み込もうとした場合に表明が発行される可能性があった。
また、 REPAIRTABLE がテーブルの.TMDファイルを削除すると同時に、 DROPTABLE がそのテーブルに属する全ファイルを削除しようとした場合にも問題が発生する可能性があった(Bug#54486)。
・ mysqld がクラッシュダンプ情報を出力する際に、いくつかの有効なポインタが間違って無効と示されていた(Bug#51817)。
・ FreeBSDで、 SIGHUP シグナルによって mysqld が強制終了された場合、 InnoDB の.ibdファイルが破損する可能性があった(Bug#51023)。
・ 2つ以上の行に書き込みを行うステートメントによって、 AUTO_INCREMENT カラムに1が挿入された場合、表明が発行される可能性があった(Bug#50619)。
・ MySQLの権限テーブルに保管されるユーザ名には最大16文字まで使用できるが、クライアントがそれよりも長いユーザ名を提供した場合、すべての文字が考慮されていた。それを従来どおり、最初の16文字で一致を確認する動作に戻した(Bug#49752)。
・ my_seek() および my_tell() 関数が、エラーを返す時に MY_WME フラグを無視していたため、クライアントプログラムがハングする可能性があった(Bug#48451)。
・ システム変数への値の割り当て時に、値の範囲の妥当性チェックを実行するタイミングが遅いため、適切なエラーチェックが行われなかった(Bug#43233)。
・ Solarisで、 NOW() や SYSDATE() などの時刻関数が、一定値を返す可能性があった(Bug#42054)。
・ FEDERATED テーブルのあるリモートサーバにアクセスできない場合、 INFORMATION_SCHEMA.TABLES テーブルに対するクエリが失敗した(Bug#35333)。