|
MySQL 5.1.43 リリースノート (日本語翻訳)
InnoDBPluginに関する注意事項:
・今回のリリースにはInnoDBPlugin1.0.6が含まれている。本バージョンは、ReleaseCandidate(RC)の品質であるとみなされている。
今回のリリースでは、
InnoDBPlugin
は、RHEL3、RHEL4、SuSE9(x86、x86_64、ia64)、およびLinuxRPM汎用パッケージを除き、ソースおよびバイナリディストリビューションに含まれている。また、FreeBSD6とHP-UX、およびS/390、PowerPC、ia64全般のLinuxでは動作しない。
機能の追加と変更:
パーティショニング
:
TIMESTAMP
カラムを使用するパーティショニング式で、
UNIX_TIMESTAMP()
関数がサポートされるようになった。たとえば、以下のようなパーティションドテーブルを作成することが可能である。
CREATETABLEt(cTIMESTAMP)
PARTITIONBYRANGE(UNIX_TIMESTAMP(c))(
PARTITIONp0VALUESLESSTHAN(631148400),
PARTITIONp1VALUESLESSTHAN(946681200),
PARTITIONp2VALUESLESSTHAN(MAXVALUE)
);
新しいパーティションドテーブルの作成、または既存のパーティションドテーブルの変更を試みると、
TIMESTAMP
値を使用する他の式はすべてエラーとなって拒否される。
タイムゾーン依存のパーティショニング関数を使用する(テーブルが以前のバージョンのMySQLを使用している)既存のパーティションドテーブルにアクセスすると、エラーではなく警告が発生する。この場合は、テーブルの修正が必要である。テーブルを修正する1つの方法として、
UNIX_TIMESTAMP()
を使用するようにテーブルのパーティショニング式を変更するという方法がある(
Bug#42849
)。
修正されたバグ:
セキュリティ修正 : yaSSLでサーバをビルドした場合、事前認証のバッファオーバーフローによってメモリが破損する、またはサーバがクラッシュする可能性があった。本バグの再現を可能にする実証スクリプトを提供してくれたIntevydis社のEvgenyLegerov氏に感謝する( Bug#50227 、 CVE-2009-4484 )。
・
重要な変更
:
レプリケーション
:
現在、
RAND()
関数はステートメントベースのレプリケーションに対してアンセーフとマークされている。この関数を使用すると、binlog_format=STATEMENTの場合には警告が生成され、binlog_format=MIXEDの場合には形式が行ベースのロギングに切り替わる。
この変更が導入されたのは、
RAND()
がステートメントモードでログに記録されるとシードがバイナリログにも書き込まれ、マスタで生成されるのと同じ順序の乱数をレプリケーションスレーブが生成してしまうためである。これでもレプリケーションが機能する可能性もあるが、
UPDATE
や
INSERT...SELECT
のように複数の行を更新する可能性があるステートメントでこの関数を使用すると、影響を受ける行の順序はやはり保証されない。異なる順序で行を取得すると、マスタとスレーブは分化し始めた(
Bug#49222
)。
・ パーティショニング :パーティションドテーブルでrecords_in_rangeハンドラ呼び出しを使用すると、取り除かれないパーティションのみではなく、すべてのパーティションがチェックされた( Bug#48846 )。
・ パーティショニング :テーブルがパーティショニングされている場合、ucs2カラムに対して検索を行うクエリが失敗した( Bug#48737 )。
・
レプリケーション
:
エスケープが必要なカラム名(`key`INTなど)を持つテーブルに、
LOADDATAINFILE
ステートメントでデータをロードすると、混合モードまたはステートメントモードでロギングするときにレプリケーションが失敗した。この場合、マスタはカラム名をエスケープせずに
LOADDATA
イベントをバイナリログに書き込んだ(
Bug#49479
)。
Bug#47927 も参照。
・ レプリケーション : 空間データタイプが原因で、行ベースのレプリケーションがクラッシュした( Bug#48776 )。
・ レプリケーション : バイナリログのパージ処理の実装に欠陥があるため、以下の状況で孤立ファイルが残る可能性があった。
nバイナリログのパージ中にサーバがエラーになったか強制終了された。
または、新しいログファイルを初めて開いたときに、新しいバイナリログの作成後にサーバがエラーになったか強制終了された。
また、パージ操作中にスレーブが接続されていなかった場合には、使用中のログファイルが削除されることがあった。そのためにデータが失われるか、マスタとスレーブの間で矛盾が生じる可能性があった( Bug#45292 )。
・
レプリケーション
:
STATEMENTまたはMIXEDのロギング形式を使用すると、ステートメント
LOADDATACONCURRENTLOCALINFILE
および
LOADDATACONCURRENTINFILE
はそれぞれ、
LOADDATALOCALINFILE
および
LOADDATALOCALINFILE
としてログに記録された(つまり、CONCURRENTキーワードが削除された)。そのため、これらのいずれかのロギングモードでレプリケーションを使用すると、影響を受けるステートメントの実行を試行中に、スレーブに対するクエリがレプリケーションSQLスレッドによってブロックされた(
Bug#34628
)。
・ レプリケーション : レプリケーションマスタでバイナリログインデックスファイルから手動でエントリを削除すると、サーバが同じバイナリログファイルを何度もスレーブに送信する可能性があった( Bug#28421 )。
・
クラスタレプリケーション
:
expire_logs_days
が設定されている場合、ログファイルのパージを実行するスレッドでデッドロックが発生し、バイナリログ操作がすべて停止する可能性があった(
Bug#49536
)。
・ストアドルーチン内で、ルーチンパラメータ引数の付いた
CONCAT_WS()
の結果をユーザ変数に選択すると、不正な結果が返される可能性があった(
Bug#50096
)。
・MySQL5.1.42のi5os64ビットディストリビューションで、IBMDB2Iストレージエンジンが欠落していた。現在は付属している( Bug#50059 )。
・ORDERBYが非定数または全文関数またはサブクエリを参照している場合、
EXPLAINEXTENDEDUNION...
ORDERBY
によってクラッシュが発生する可能性があった(
Bug#49734
)。
・push_warning_printf()関数が無効なエラーレベルMYSQL_ERROR::WARN_LEVEL_ERRORで呼び出されていたため、表明違反が発生した。この問題を修正するために、MYSQL_ERROR::WARN_LEVEL_ERRORはMYSQL_ERROR::WARN_LEVEL_WARNに変更された( Bug#49638 )。
・一部のプリペアドステートメントを再実行すると、表明が発生する可能性があった( Bug#49570 )。
・make_cond_for_table_from_pred()におけるValgrindエラーが修正された。本バグを修正するためのパッチを提供してくれたSergeyPetrunya氏に感謝する( Bug#49506 )。
・Windowsでコンパイルする場合、InnoDBのCMake定義にエラーがあるためにエンジンが不正にビルドされた( Bug#49502 )。
・
CHECKSUMTABLE
に対するValgrind警告が修正された(
Bug#49465
)。
・SPATIALまたはFULLTEXTインデックスにインデックスアルゴリズム(BTREEなど)を指定すると、サーバがクラッシュした。これらのインデックスタイプはアルゴリズムの指定をサポートしないため、アルゴリズムの指定は禁止された( Bug#49250 )。
・オプティマイザが、フォームWHEREcol_name='const1'ANDcol_name='const2'の条件を不正に処理することがあった( Bug#49199 )。
・1つのステートメント内で複数の実行を行うと、パラメータが定数の場合であっても乱数発生器が複数回初期化されるため、
DECODE()
および
ENCODE()
の実行が不十分になる可能性があった(
Bug#49141
)。
・MySQL5.1は2バイトの照合番号をサポートしないが、数値をチェックしなかったため、値が範囲外の場合にクラッシュした( Bug#49134 )。
・バイナリロギングが有効な場合、
REVOKE...ON{PROCEDURE|FUNCTION}FROM...
によってクラッシュが発生する可能性があった(
Bug#49119
)。
・ucs2カラムにインデックスを使用する場合、
LIKE
演算子が正しく動作しなかった(
Bug#49028
)。
・check_key_in_view()のコードブランチの1つにDBUG_RETURNが欠落していたため、デバッグビルドでクラッシュが発生した( Bug#48995 )。
・いくつかのstrmake()呼び出しに、長さの不正な引数(1だけ大きい)があった( Bug#48983 )。
・Fedora12でソースとターゲットのバッファが重複する場合に、strmov()が正しい操作を保証しなかった。重複しないバージョンを使用するように呼び出しが修正された( Bug#48866 )。
・内部TABLE構造のリセットが不完全であるために、サブクエリで
eq_ref
テーブルにアクセスするとクラッシュする可能性があった(
Bug#48709
)。
・プリペアドステートメントを再実行すると、サーバがクラッシュする可能性があった( Bug#48508 )。
・
ER_UPDATE_INFO
に対するエラーメッセージに、バッファオーバーフローまたは切り捨てが発生する危険性があった(
Bug#48500
)。
・
SHOWBINLOGEVENTS
はWrongoffsetorI/Oerrorというエラーで失敗する可能性があった(
Bug#48357
)。
・
LOADDATAINFILE
ステートメントのバイナリロギングに関連するValgrind警告が修正された(
Bug#48340
)。
・CAPIでのエイリアス化違反によって、クラッシュが発生する可能性があった( Bug#48284 )。
・1つのスレッドがテーブルに対するロックを待機している状態で、別のスレッドがそのテーブルを削除し、同じ名前と構造で新しいテーブルを作成した場合、1番目のスレッドはテーブルが再作成されたことを認識できず、古いテーブルに所属するがすでに解放されているキャッシュ内のメタデータを使用しようとした( Bug#48157 )。
・InnoDBMonitorは、長いロック待機の後で診断情報の出力に失敗する可能性があった( Bug#47814 )。
・インデックスを使用しないGROUPBY...WITHROLLUPを含むクエリで、不正な結果が返される可能性があった( Bug#47650 )。
・テーブルオープンのステージでストアドプロシージャの呼び出しが失敗した場合、同じステージで後続の呼び出しが失敗しなくてもクラッシュが発生する可能性があった( Bug#47649 )。
・Solarisで、クラッシュ後のエラーログにスタックトレースが出力されなかった( Bug#47391 )。
・サブクエリの結果に割り当てられたユーザ変数を、集約関数で
SELECT
ステートメントの結果フィールドとして使用すると、クラッシュが発生した(
Bug#47371
)。
・
STOPSLAVEUNTIL
の最初の実行が、予定よりも早く停止した(
Bug#47210
)。
・
--vertical
オプションを指定して
mysql
クライアントを呼び出すと、
--skip-column-names
オプションが無視された(
Bug#47147
)。
・init_available_charsets()が正しく初期化されないことがあった( Bug#45058 )。
・
VARCHAR(
N
)
カラムにマルチバイト文字が含まれている場合、カラムの値が
N
バイトよりも長い場合であっても、ORDERBYBINARY(
col_name
)はソートの実行にカラムの最初の
N
バイトしか使用しなかった(
Bug#44131
)。
・NULL値との比較で正しい結果が得られないことがあった( Bug#42760 )。
・InnoDBのテンポラリテーブルで、クラッシュリカバリが動作しなかった( Bug#41609 )。
・ mysql_upgrade コマンドはmysql.procテーブルに3つの追加フィールド(character_set_client、collation_connection、db_collation)を作成するが、フィールドに正しい値が代入されなかった。そのため、ストアドプロシージャの実行中にエラーメッセージが報告された( Bug#41569 )。
・圧縮したMyISAMファイルを開く場合、MyISAMファイルは常にメモリマップされ、メモリスワップの問題を引き起こすことがあった。この問題に対処し、MyISAMファイルのメモリマッピングに使用されるメモリの量を制限するために、myisam_mmap_sizeという新しいシステム変数が追加された( Bug#37408 )。
・権限ハッシュテーブルで競合が発生するために、あるスレッドによってすでに削除されている要素を別のスレッドが削除しようとすることがあった。その結果、
SETPASSWORD
または
FLUSHPRIVILEGES
でクラッシュが発生する可能性があった(
Bug#35589
、
Bug#35591
)。
・DROPCOLUMN句とADDCOLUMN句の両方を含む
ALTERTABLE
は、サーバをクラッシュさせるかロックする可能性があった(
Bug#31145
)。