![]() |
![]() |
MySQL 5.1.36 リリースノート (日本語翻訳)
機能の追加と変更:
・ 重要な変更 : レプリケーション :以前、出来事ログイベントはmysqlbinlogからの出力でコメントとして表されていたが、binlogを再生すると、効果的にサイレントになる。
(出来事ログイベントは、イベントがバイナリログに記録されることなく、データベースの内容が変更される可能性がある出来事を表す。)
SQLがサーバに適用されると、潜在的に、異なるデータを持つマスタとスレーブになる可能性があった。以前の動作を除くアプリケーションを停止することなく、出来事ログイベントを処理できるようにするために、意味の無いステートメントRELOADDATABASEがその出来事ログイベントのSQL出力に追加され、これによってエラーが発生する。
現在、この機能を使用するには、サーバに出力を適用する前に、ダンプファイルの手動による編集と、データベース管理者による各ケースの個別の処理が必要である( Bug#44442 )。
・ mysql_upgrade では、現在、 mysqlcheck を呼び出すと、使用する接続パラメータを表すメッセージが表示される( Bug#44638 )。
・Windows用の時間帯テーブル(http://dev.mysql.com/downloads/ timezones.html で入手可能)が更新されている( Bug#39923 )。
・現在、
mysqltest
プログラムには、ファイル名を変更するための
move_file
from_fileto_file
コマンドがある。これは、プラットフォーム固有の外部コマンドを呼び出すのではなく、テストケースで使用される(
Bug#39542
)。
・
max_binlog_cache_size
の最大値は、
(32ビットプラットフォームでも)2
32
1から2
64
1まで増加した。これにより、バイナリログが有効である場合、4GB以上のトランザクションが実行可能になる(
Bug#10206
)。
修正されたバグ:
・
パフォーマンス
:
InnoDB
の適応ハッシュラッチは(ある場合)、潜在的な長期間にわたる処理のためにリリースされている。これにより、現在のクエリでテンポラリテーブルが削除されているか、テンポラリテーブルがメモリからディスクへ変更されているか、
CREATETABLE...SELECT
を使用しているか、またはトランザクション内で使用されるテーブルで
MyISAM
の修正を実行する場合に、他のクエリのスループットが改善される
(
Bug#32149
)。
・
セキュリティの修正
:
CREATEROUTINE
権限を持ち、
EXECUTE
権限を持たないアカウントでストアドプロシージャを作成しようとすると、サーバがクラッシュした(
Bug#44798
)。
・ セキュリティの修正 :適切な権限がないアカウントで、ストアドプロシージャを作成しようとすると、サーバがクラッシュした( Bug#44658 )。
・ セキュリティの修正 :4つの潜在的な書式文字列の脆弱性(Veracodeコード分析により発見)が修正された( Bug#44166 )。
・
矛盾を含む可能性がある変更
:サーバは、スタートアップオプションの制御の下でプラグインを読み込むことができる。たとえば、サーバを起動すると、多くのストレージエンジンを着脱可能な形式で組み込むことができる。以下の説明で、
plugin_name
は
innodb
などのプラグイン名を表す。
以前は、プラグインオプションは他のbooleanオプションと同様に処理されていた( セクション4.2.3.2「ProgramOptionModifiers」 を参照)。つまり、これらのオプションによってプラグインが有効になった。
-- plugin_name
-- plugin_name =1
--enable- plugin_name
また、以下のオプションではプラグインが無効になった。
-- plugin_name =0
--disable- plugin_name
--skip- plugin_name
ただし、プラグインの読み込みにbooleanオプションを使用すると、プラグインが正常な起動に失敗した場合の動作を制御できなかった(プラグインが無効である場合、サーバは終了するべきか、または起動するべきか)。実際の動作では、サーバはプラグインが無効な状態で起動していたが、これは問題を引き起こす可能性があった。たとえば、
InnoDB
が起動に失敗した場合、
既存の
InnoDB
テーブルにアクセスできなくなり、新規
InnoDB
テーブルを作成しようとすると、
NO_ENGINE_SUBSTITUTION
のSQLモードで代わりにエラーを発生できない限り、デフォルトのストレージエンジンを使用するテーブルになる。
現在では、プラグインの読み込みを制御するために使用されるオプションが3つの形式を持つように変更されている。
o
--
plugin_name
=OFF
プラグインを有効にしない。
o
--
plugin_name
[=ON]
プラグインを有効にする。プラグインの初期化に失敗した場合、サーバを起動してもプラグインは無効である。値なしでオプション
--
plugin_name
を指定した場合もプラグインは有効になる。
o
--
plugin_name
=FORCE
プラグインを有効にする。プラグインの初期化に失敗した場合は、サーバを起動しない。つまり、サーバはプラグインと共に実行されるか、またはサーバもプラグインもどちらも実行されないかのいずれかである。
OFF
、
ON
、
FORCE
の値は大文字と小文字が区別されない。
CSV
および
InnoDB
が着脱可能なストレージエンジンとして組み込まれ、サーバの起動時に読み込むとすると、条件として、
CSV
が初期化に失敗した場合でもサーバは実行可能であるが、
InnoDB
の初期化は正常に行われる必要がある。これを実現するには、オプションファイルで以下の行を使用する。
[mysqld]
csv=ON
innodb=FORCE
--
plugin_name
=0
または
--
plugin_name
=1
のオプションを使用した場合、それぞれ
--
plugin_name
=OFF
または
--
plugin_name
=ON
に変更されるため、この変更は以前の実装では不完全である。
--enable-
plugin_name
は引き続きサポートされ、
--
plugin_name
=ON
と同様である。
--disable-
plugin_name
および
--skip-
plugin_name
も引き続きサポートされ、
--
plugin_name
=OFF
と同様である(
Bug#19027
)。
Bug#45336 も参照。
・
重要な変更
:
レプリケーション
:
BEGIN
、
COMMIT
、および
ROLLBACK
ステートメントは、現在では
--replicate-do-db
または
--replicate-ignore-db
の規則による影響を受けない(
Bug#43263
)。
・
パーティショニング
:複数列で
DISTINCT
または
GROUPBY
を使用するクエリでは、パーティションドテーブルで正しい結果が得られない(
Bug#44821
)。
Bug#41136 も参照。
・ レプリケーション :行ベースのログを使用する場合、イベントフィールドのメタデータが255バイトを超えるイベントの長さは正しく計算されなかった。これにより、バイナリログが破損したり、サーバがハングすることがあった( Bug#42749 )。
Bug#44548 、 Bug#44672 、 Bug#44752 も参照。
・ レプリケーション :ステートメントまたは他のデータベースイベントが、ステートメントベースの形式を使用してバイナリログへ確実に書き込まれることを判断できない状況で発行される、Statementisnotsafetologinstatementformatという警告が、Statementmaynotbesafetologinstatementformatに変更された( Bug#42415 )。
・
レプリケーション
:クエリをスレーブに転送する際にレプリケーションで使用される
Query_log_event
がリファクタリングされた。
Query_log_event
は、実行により発生するエラーコードの保存および送信も行う。これは、場合によりスレーブでもステートメントを実行する必要があるためであり、この結果、同じエラーコードが生じる。以前、
Query_log_event
コンストラクタの結果が複雑なルーチンを使用したエラーコードになり、その結果がコンストラクタ内に残されることがあった。これは、無効なエラーに関する少なくとも
2
つの既知のバグとも関連し、コンストラクタが適切に設計されておらず、再度記述し直す必要があることを明確に表していた
(
Bug#41948
)
。
Bug#37145 も参照。
・
レプリケーション
:
スレーブがテンポラリテーブルを複製しているときにそのスレーブを停止して再起動すると、スレーブサーバがクラッシュしたり、表明違反が発生したりする可能性があった。テンポラリテーブルはスレーブスレッドの再起動ごとに保存されたが、使用されるスレッドへの参照(
table->in_use
)は再起動時に正しく更新されず、新しいスレッドではなく古いスレッドを引き続き参照していたため、この問題が発生した。この問題は、ステートメントベースのレプリケーションにのみ影響した(
Bug#41725
)。
・
WHERE
句および
GROUPBY
句を使用して
、選択リスト内の
MIN()
または
MAX()
を組み合わせると、不正な結果が生じる可能性があった(
Bug#45386
)。
・VC++2008で
libmysqld
を使用する場合のリンカのエラーが修正された。
(
Bug#45326
)
・MacOSXでのコンパイラ警告が修正された( Bug#45286 )。
・
cp1250
文字セットを使用する
IBMDB2I
テーブルで
SELECT
クエリを実行すると、エラーが生成された。
ibmdb2ierror2027:Errorconvertingsingle-bytesortsequencetoUCS-2
( Bug#45197 )
・派生テーブルの
LONGTEXT
または
LONGBLOB
カラムで
ROUND()
を使用すると、サーバがクラッシュする可能性があった(
Bug#45152
)。
・
PAD_CHAR_TO_FULL_LENGTH
のSQLモードが有効であった場合、
DROPUSER
はアカウントのすべての権限の停止に失敗する可能性があった(
Bug#45100
)。
・
GROUPBY
を使用して、
constant
(単一行の)
InnoDB
テーブルと他のテーブルを結合すると、サーバがクラッシュした
(
Bug#44886
)
。
・
ALTERTABLE
を表示すると
サーバがクラッシュした
。(
Bug#44860
)
・
IBMDB2I
ストレージエンジンでパーティショニングを使用すると、
エンジンは、有効な文字セットがサポートされていないことをレポートする可能性があった(
Bug#44856
)。
・64ビットバージョンのMySQLを使用する場合、UTF8文字を使用する
IBMDB2I
ストレージエンジンのテーブルでクエリを実行すると失敗した
(
Bug#44811
)
。
・
sort_buffer_size
がすべてのソートキーについて十分なサイズでない場合、IndexMerge後にファイルソートを使用すると、サーバがクラッシュする可能性があった(
Bug#44810
)。
Bug#40974 も参照。
・
UNCOMPRESSED_LENGTH()
は、5バイト未満の文字列を渡すと不要な結果を返した。現在は、
UNCOMPRESSED_LENGTH()
はNULLを返して警告を生成するようになっている(
Bug#44796
)。
・いくつかのValgrind警告が抑制されていた( Bug#44774 、 Bug#44792 )。
・
N
が
constant
テーブル(単一行を含むテーブル)の列である関数
RAND(
N
)
を選択すると、
SIGFPE
シグナルの使用に失敗した
(
Bug#44768
)
。
・
PASSWORD()
関数および
OLD_PASSWORD()
関数は、
BLOB
の引数を使用する場合、内部バッファの外側でメモリを読み取ることができた(
Bug#44767
)。
・文字列を異なる文字セットへ変換する場合、入力と出力で同じバッファを使用して、不正な結果または警告が生じる可能性があった( Bug#44743 、 Bug#44766 )。
・ mysqld_safe が、 logger プログラムの検索に失敗する可能性があった( Bug#44736 )。
・読み取り専用のXAトランザクションを最適化したコードは、トランザクションがアクティブでなくなると、XIDのリセットに失敗した( Bug#44672 )。
・トランザクション処理に関連するValgrind警告が抑制されていた( Bug#44664 )。
・
IBMDB2I
ストレージエンジンを使用してテーブルを作成する際、
IBMi内の対応するファイルに適用される
RCDFMT
(レコード形式)
は、テーブル名に従って設定された。テーブル全体の処理中、名前がテーブル名と一貫性のない値に変更される可能性があった。また、レコード形式がファイルの内容と比較すると矛盾するものになった。現在では、
IBMDB2I
ストレージエンジンによって、明示的な
RCDFMT
句が
DB2ストレージエンジンレイヤに伝えられる
CREATETABLE
ステートメントに追加されている
(
Bug#44610
)
。
・ innochecksum は引数から入力ファイル名を正しく判別できないことがあった( Bug#44484 )。
・不正な時間が mysqldump 出力の最後にレポートされた( Bug#44424 )。
・
GROUPBY
式のキャッシュにより、
コンパイル時と実行時の計算に不一致が生じ、サーバがクラッシュすることがあった。(
Bug#44399
)
・マルチバイト
cp932
または
SJIS
文字の文字列での
大文字/小文字の変換は、不正な結果になる場合があった(
Bug#44352
)。
・
InnoDB
は、
TableMonitorの
COLUMNS
出力で
DB_ROLL_PTR
情報を消失していた
(
Bug#44320
)
。
・
INSERTINTO...SELECT
ステートメントで、重複キーエラーのため表明違反が発生する可能性があった(
Bug#44306
)。
・
IBMDB2I
テーブルでサポートされていない文字セットを使用すると、DB2エラー2501または2511が生成された。エラーは更新され、エラー2504が生成させるようになっている(文字セットがサポートされていない)(
Bug#44232
)。
・64ビットWindowsシステムでは、
myisamchk
が4GBを超える
key_buffer_size
値を処理できなかった
(
Bug#43940
)
。
・ユーザ定義の
UTF8
照合では、
列には長すぎる値を保存しようとすると、サーバがクラッシュした(
Bug#43827
)。
・テーブルの変更によるクエリキャッシュエントリの無効化のため、スレッドが“freeingitems(アイテムの解放)”状態のクエリキャッシュ内でハングする可能性があった( Bug#43758 )。
・
UNION
クエリの最後の
SELECT
が括弧で囲まれておらず、
ORDERBY
句を含んでいる場合、
EXPLAINEXTENDED
がクラッシュする可能性があった(
Bug#43612
)。
・
InnoDB
テーブルについてマルチテーブルの更新を行うと、
予期しない結果が生成される可能性があった(
Bug#43580
)。
・
mysql_stmt_prepare()
の後で、クライアントがMySQLサーバとの接続を切断された場合、最初に
mysql_stmt_execute()
を呼び出すとエラーを返す(予想どおり)が、連続して
mysql_stmt_execute()
または
mysql_stmt_close()
を呼び出すと、クライアントがクラッシュした(
Bug#43560
)。
・
ORDERBY
var
(
var
は
値が
NULL
のグローバルシステム変数)を使用する
DELETE
ステートメントを使用すると、サーバがクラッシュする可能性があった
(
Bug#42778
)
。
・OpenSSLに対してリンクされたビルドでは、X509証明書の使用に関連したメモリリークがあった( Bug#42158 )。
・実行時に
innodb_commit_concurrency
をゼロからゼロ以外、またはゼロ以外からゼロへ変更する場合、競合条件があった。現在では、この変数を実行時に、ゼロからゼロ以外、またはゼロ以外からゼロへ変更できない。値はゼロ以外の値から別の値へ変更できる(
Bug#42101
)。
Bug#45749 も参照。
・
SELECT...INTO@var
が、INTO句のない
SELECT...
とは異なる値を生成する可能性があった(
Bug#42009
)。
・ mysql_zap は、MacOSXで機能しなかった。( Bug#41883 )
・MERGEテーブルと
table_cache
の追い立ての間の競合条件が原因で、クラッシュが発生していた。
00000001403C452Fmysqld.exe!memcpy()[memcpy.asm:151]
00000001402A275Fmysqld.exe!ha_myisammrg::info()[ha_myisammrg.cc:854]
00000001402A2471mysqld.exe!ha_myisammrg::attach_children()[ha_myisammrg.cc:488]
00000001402A2788mysqld.exe!ha_myisammrg::extra()[ha_myisammrg.cc:863]
000000014015FC5Dmysqld.exe!attach_merge_children()[sql_base.cc:4135]
000000014016A4C1mysqld.exe!open_tables()[sql_base.cc:4697]
000000014016A898mysqld.exe!open_and_lock_tables_derived()[sql_base.cc:4956]
000000014018BB54mysqld.exe!mysql_insert()[sql_insert.cc:613]
000000014019EDD3mysqld.exe!mysql_execute_command()[sql_parse.cc:3066]
00000001401A2F06mysqld.exe!mysql_parse()[sql_parse.cc:5791]
00000001401A3C1Amysqld.exe!dispatch_command()[sql_parse.cc:1202]
00000001401A4CD7mysqld.exe!do_command()[sql_parse.cc:857]
0000000140246327mysqld.exe!handle_one_connection()[sql_connect.cc:1115]
00000001402B82C5mysqld.exe!pthread_start()[my_winthread.c:85]
00000001403CAC37mysqld.exe!_callthreadstart()[thread.c:295]
00000001403CAD05mysqld.exe!_threadstart()[thread.c:275]
0000000077D6B69Akernel32.dll!BaseThreadStart()
Tryingtogetsomevariables.
Somepointersmaybeinvalidandcausethedumptoabort...
( Bug#41212 )
・コマンドラインから mysqld が開始された場合、共有メモリの接続がVistaで機能しなかった( Bug#41190 )。
・カラムリスト句で作成したビューの場合、
HAVING
句を使用したビューで選択を行うと、カラムエイリアスが置換されなかった(
Bug#40825
)。
・テーブル自己結合に関係する複数テーブルの
DELETE
を使用すると、サーバがクラッシュする可能性があった(
Bug#39918
)。
・
'#'
文字を含むコメントを使用して
InnoDB
テーブルを作成すると、外部キー制約が省略された(
Bug#39793
)。
・
ALTERTABLE
は、オリジナルテーブルの
ROW_FORMAT
情報を保護せず、これにより、後続の
ALTERTABLE
および
OPTIMIZETABLE
ステートメントで、
InnoDB
テーブルの行形式が
失われる可能性があった(
Bug#39200
)。
・
mysql
オプションの
--ignore-spaces
が機能しなかった(
Bug#39101
)。
・
クエリが1054Unknowncolumn'...'in'fieldlist'
というエラーを生成するようなものだった場合、そのクエリで
EXPLAINEXTENDED
を使用すると、サーバがクラッシュする可能性があった(
Bug#37362
)。
・
mysql
クライアントで、デフォルトのbinary文字セットを使用すると、
DELIMITER
などの内部コマンドで大文字と小文字が区別されるようになった
(
Bug#37268
)
。
・
mysqldump--tab
は、対応するテーブルの
.sql
ファイルではなく
stdout
のトリガをダンプしていた
(
Bug#34861
)
。
・環境変数
MYSQL_HISTFILE
が
/dev/null
に設定されている場合、
mysql
クライアントは
/dev/null
デバイスファイルを標準ファイルとして上書きした(
Bug#34224
)。
・ mysqld_safe は、特定のパラメータにスペースが含まれる場合、そのパラメータについて誤った処理を行っていた( Bug#33685 )。
・スレッドIDが32ビットを超えると、 mysqladminkill が機能しなかった( Bug#32457 )。
・いくつかのクライアントプログラムでは、
--skip-password
を“sendnopassword(パスワードを送らない)”と解釈することに失敗した(
Bug#28479
)。
・
mysql--html
からの出力で、「
<
」、「
>
」
、または「
&
」文字
をエンコードできなかった(
Bug#27884
)。
・
mysql_convert_table_format
が
MEMORY
テーブルまたは
BLACKHOLE
テーブルへのテーブル変換を抑止せず、この結果、データが消失する可能性があった
(
Bug#27149
)
。