|
MySQL5.5.31 での変更点( 2013-04-18 )
RPM に関する注意
・ rpmuvh または yum localupdate を使用してコミュニティRPMをコマーシャルRPMにアップグレードできなかった。MySQL5.6.11で、この問題に対処するためにRPM仕様ファイルが更新され、以下のような影響が生じた。
詳細については、以下を参照。
アップグレードではなくMySQL5.6.11をインストールする場合、以下のように yum を使用したインストールが可能。
shell> yum installMySQL-server- NEWVERSION .glibc23.i386.rpm
MySQL5.6.11にアップグレードする場合、古いバージョンを削除して新しいバージョンをインストールすることによってアップグレードが実行される。方法としては、以下の手順を実行する。
a. 既存のバージョン5.6. X を削除する。 OLDVERSION は削除するバージョン。
shell> rpm -eMySQL-server- OLDVERSION .glibc23.i386.rpm
この手順を繰り返して、インストールされているすべてのバージョンのMySQLRPMを削除する。
b. 新しいバージョンをインストールする。 NEWVERSION はインストールするバージョン。
shell> rpm -ivhMySQL-server- NEWVERSION .glibc23.i386.rpm
もしくは、以下のように yum を使用して、削除とインストールを実行することも可能。
shell> yum removeMySQL-server- OLDVERSION .glibc23.i386.rpm
shell> yum installMySQL-server- NEWVERSION .glibc23.i386.rpm
(Bug#16445097、Bug#16445125、Bug#16587285)
機能の追加と変更
・ MySQLは、デフォルトのOpenSSL圧縮を使用しなくなった(Bug#16235681)
修正されたバグ
・ パフォーマンス :InnoDB: 削除されたが パージ されていない行が多数あるテーブル操作のパフォーマンスが改善された。これは主に、大量の削除や プライマリキー カラムの更新を実行する作業で、 パージ遅延 が生じるほどシステムがビジー状態になる場合の速度が改善された(Bug#16138582、Bug#68069)。
・ パフォーマンス :InnoDB: 圧縮 を使用するテーブルの DROP TABLE ステートメントが必要以上に遅くなり、数秒間停止する可能性があった。MySQLは、 DROP 操作の一部として、テーブルに関連する バッファプール 内の ページ を不必要に展開していた(Bug#16067973)。
・ 矛盾を含む可能性がある変更 : パーティショニング : 数値、日時、 ENUM 、および SET カラムを使用する KEY パーティショニングのハッシュ関数をMySQL5.5で変更したことにより、影響を受けるカラムタイプで KEY によるパーティショニングまたはサブパーティショニングを使用するテーブルおよびMySQL5.5以降のサーバで作成されたテーブルが、MySQL5.1サーバとの互換性を失った。これは、これらの関数を変更したことにより、同じテーブルの定義およびデータに対して、MySQL5.5以降のサーバで計算されるパーティションIDとMySQL5.1サーバで計算されるパーティションIDがほぼ確実に異なるようになったことが原因。
この問題の原因となるMySQL5.5における KEY パーティショニングの実装の主な変更点は、次の2点である。1.数値および日時のカラムに使用されるハッシュ関数が、バイナリから文字ベースに変更された。2. ENUM および SET カラムのハッシュに使用されるベースが、 latin1ci 文字からバイナリに変更された。
修正として、MySQL5.5以降では、 KEY パーティショニングに使用するハッシュのタイプを選ぶ機能が追加された。 CREATE TABLE および ALTER TABLE の PARTITION BY KEY オプションに新たに ALGORITHM 拡張が実装された。 PARTITION BY KEY ALGORITHM=1 ([ columns ]) を指定すると、サーバはMySQL5.1に実装されているハッシュ関数を使用する。 ALGORITHM=2 を指定すると、サーバはMySQL5.5以降のハッシュ関数を使用する。デフォルトは ALGORITHM=2 。 ALGORITHM に適切な値を指定することで、以下のようなタスクを実行できる。
重要 :このようにアップグレードしたテーブルは、 ALTER TABLE ... PARTITION BY KEY ALGORITHM=1 (...) がサポートされるMySQLでこのオプションを使用してテーブルを再びダウングレードしない限り、MySQL5.1では使用できない。
この構文は下位互換性がないため、古いバージョンのMySQLサーバではエラーが発生する。 mysqldump は、 CREATE TABLE ... PARTITION BY KEY ステートメントの生成時に ALGORITHM=1 または ALGORITHM=2 があると、それを条件付きコメントに含めるため、5.5.31よりも古いバージョンのMySQLサーバはこれを無視する。アップグレードに関してさらに考慮すべきことがある。MySQL5.6.11よりも前のMySQL5.6サーバは、ステートメントがMySQL5.5サーバで生成されている場合、このようなステートメントで ALGORITHM オプションを無視しない。これは、条件付きコメントがバージョン5.5.31を参照するためである。このような場合、MySQL5.6.10またはそれよりも古いMySQL5.6サーバにロードする前に、手動でダンプを編集し、このオプションをすべて削除またはコメントアウトする必要がある。MySQL5.6.11以降のバージョンの mysqldump で生成されるダンプでは、コメントで使用されるバージョンが5.6.11であるため、この問題は関係ない。詳細については、 「ALTER TABLE Partition Operations」 を参照。
この修正の一環として、 InnoDB による誤った表明も削除された。削除された行が以前に読み込まれたため、行の削除時に行が間違ったパーティションにあるという表明をサーバが発行していた(Bug#14521864、Bug#66462、Bug#16093958、Bug#16274455)。
参考:Bug#11759782も参照。
・ 重要な注意事項 : レプリケーション : ステートメントベースのログを使用して、テーブルから同一名のビューへの複製が可能であった。代わりに行ベースのログを使用すると、スレーブでエラーが発生した。現在は、DMLの実行前にターゲットオブジェクトのタイプが確認され、スレーブのターゲットが実際にはテーブルでない場合、エラーが発生する。これは、バイナリログフォーマットが使用されているかどうかに関係なく該当する(Bug#11752707、Bug#43975)。
・ InnoDB: InnoDB テーブルで、 VARCHAR カラム(またはプリフィックス)の PRIMARY KEY が空の場合、インデックスページの圧縮が失敗する可能性があった(Bug#16400920)。
・ InnoDB: デバッグビルドで、 InnoDB のステータスエクスポートが競合状態になり、サーバが終了する可能性があった(Bug#16292043)。
・ InnoDB: RENAME TABLEは、MySQLのミューテックス取得によるデッドロックが原因でハングした(Bug#16305265)。
・ InnoDB: 内部読み込み操作が、実際には非同期であるのに同期として誤って分類される可能性があった。I/O要求が予想以上に速く返される場合、スレッドが非効率的にスケジュールされている可能性があった。この問題は、主に 先読み 要求に影響するため、ユーザクエリによって実行されるI/Oへの影響は比較的少なかった(Bug#16249505、Bug#68197)。
・ InnoDB: InnoDB によって abort() への不適切な呼び出しが行われると、サーバが終了する可能性があった(Bug#16263506)。
・ InnoDB: テーブルが外部キー制約によってリンクされている場合、一つのテーブルをロードすると、再帰的に他のリンクされたテーブルを開く。多数のテーブルが外部キー制約によってリンクされている場合、サーバが終了する原因となるスレッドスタッグオーバーフローを引き起こすことがある。外部キー制約によってリンクされたテーブルは現在、繰り返しロードされる。また、再帰的な様式で行ったカスケード操作は、現在明示スタックを使用して繰り返し行われる。(Bug#16244691)
・ InnoDB: 変更バッファ からパージ操作が適用されたちょうどそのときに、MySQLサーバが停止した場合、次に再起動したときに、このパージ操作が誤って再び実行される可能性があった。回避策として、構成オプション innodb_change_buffering=changes を設定し、パージ操作の変更バッファリングをオフにした(Bug#16183892、Bug#14636528)。
・ InnoDB: InnoDB テーブルで CREATE TABLE を実行するためのページ圧縮中に、算術下位桁あふれが発生すると、サーバが終了する可能性があった(Bug#16089381)。
・ InnoDB: skip-innodb オプションを使ってサーバが起動された場合、もしくは、 InnoDB が起動に失敗した場合、以下の情報スキーマテーブルへのクエリにより重大なエラーが起きた。
(Bug#14144290)
・ InnoDB: long semaphore wait 診断の出力時に、競合状態により sync_array_cell_print() でセグメンテーション違反(SEGV)が発生した。この修正では、出力中にセルが解放されるようにすることで競合状態を解決する(Bug#13997024)。
・ InnoDB: クエリを停止すると、同じテーブル(カーソル)インスタンスが再び使用されたときに、InnoDB表明違反が発生した。これは、Bug#14704286の修正によって生じた退化エラーの結果である。この修正では、実行時間の長いクエリでkillシグナルを処理するチェックが導入されたが、カーソルは適切な状態に回復されなかった(Bug#68051、Bug#16088883)。
・ InnoDB: 内部生成された外部キー名の長さがチェックされなかった。内部生成された外部キー名が64文字の制限を超えた場合、SHOW CREATE TABLEから無効なDDLが生成された。この修正では、内部生成された外部キー名の長さをチェックし、制限を超えている場合、エラーメッセージをレポートする(Bug#44541、Bug#11753153)。
・ パーティショニング : レンジでパーティションされ、 TO_DAYS() をパーティショニング関数として使用しているテーブルへのクエリは、取り除きのときに常にテーブルの最初のパーティションを含んでいた。クエリの BETWEEN 句に使用されているレンジに関係なくこの事象が発生した(Bug#15843818、Bug#49754)。
・ パーティショニング : ビューに対して ALTER TABLE ... DROP PARTITION を実行すると、予想どおりにエラーが発生して失敗するのではなく、サーバがクラッシュした(Bug#14653504)。
・ レプリケーション : ユーザ変数に対してゼロ長の名前( @`` など)を指定すると、バイナリログから読み取るときに誤ってデータの記号やネットワークの破損とみなされた(Bug#16200555、Bug#68135)。
・ レプリケーション : --replicate-* オプション( 「Replication Slave Options and Variables」 を参照)を使用すると、場合によって、スレーブでメモリリークが発生する可能性があった(Bug#16056813、Bug#67983)。
・ レプリケーション : バックティック(`)文字が、内部で生成されたSQLステートメントで必ずしも正しく処理されず、場合によってはスレーブでエラーを招く可能性があった(Bug#16084594、Bug#68045)。
参考:このバグは、Bug#14548159およびBug#66550による退化である。
・ レプリケーション : ダンプスレッドの読み取りイベントループでEOFを検出した直後から新しいバイナリログファイルに変更するかどうかを決定するまでの間に、場合によって、まだ決定が下されていないのに新しいイベントをバイナリログに記述することが可能であった。もしもこのときにログの交換が発生した場合、EOF検出後に発生したイベントが抜けてしまい、データの喪失が起きた。現在はこのような場合、ログの交換が許可される前にすべてのイベントが必ず処理されるための対策が講じられている(Bug#13545447、Bug#67929)。
参考:Bug#16016886も参照。
・ SHOW ENGINE PERFORMANCE_SCHEMA STATUS は、正しいメモリ割り当て値が4GBを超える場合、間違った値をレポートする可能性があった(Bug#16414644)。
・ GRANT ステートメントで長いデータベース名が使用されていると、サーバが終了する可能性があった(Bug#16372927)。
・ Linuxで epoll() に関する競合状態が発生すると、スレッドプールプラグインがイベントを見逃す可能性があった。これは、16コアを超えるコア構成のシステムで起きる可能性が最も高かった(Bug#16367483)。
・ SQLハンドラが開かれているときに、プリペアドステートメントで既存のビューの名前を使ってテーブルを作成しようとすると、サーバが終了する可能性があった(Bug#16385711)。
・ クエリで、 WHERE 句に XOR 操作が含まれている IN 句にサブクエリが含まれていた場合、間違った結果が返された(Bug#16311231)。
・ アップグレード操作で、.errファイルへのアクセスが不可能であることについて、RPMパッケージで不必要なエラーが生成された(Bug#16235828)。
・ NULL 選択に対して範囲オプティマイザを起動すると、サーバが終了した(Bug#16192219)。
・ yaSSLは、適切なパディングチェックを実行せず、プレーンテキストの最終バイトのみ検査し、それにより削除するバイト数を決定していた(Bug#16218104)。
・ スレッドプールプラグインを有効にした状態で接続を大量に行うと、Valgrindパニックを引き起こすか、またはクライアントが接続不可能になる可能性があった(Bug#16088658、Bug#16196591)。
・ 初期の test データベースには、 DROP DATABASE を機能させないようにするdummy.bakファイルが含まれていた。現在は、このファイルは含まれていない。また、現在は以下の行を含む db.opt ファイルが含まれている。
default-character-set=latin1
default-collation=latin1_swedish_ci
(Bug#16062056)
・ システム変数に DEFAULT を設定すると、サーバが終了する可能性があった(Bug#16044655)。
・ ストアド関数とユーザ変数を特定の組み合わせで使用して PREPARE ステートメントを発行すると、サーバが終了した(Bug#16056537)。
・ 強制終了処理中のスレッドプールの競合によって、Valgrindパニックを引き起こす可能性があった(Bug#15921866)。
・ クライアントプログラムとMySQLサーバとの接続が切れたときか、またはクライアントが mysql_stmt_prepare() を実行した後にサーバがシャットダウンを開始した場合、次に mysql_stmt_prepare() を実行するときにエラーが返されるが(予定どおり)、その次の mysql_stmt_execute() 呼び出しでクライアントがクラッシュする(Bug#14553380)。
・ Geometry カラムの UNION として定義されたビューで SHOW COLUMNS を実行すると、サーバが終了する可能性があった(Bug#14362617)。
・ LIKE パターンに指定されているワイルドカードの 「 % 」 が多すぎると、セグメンテーションエラーが発生する可能性があった(Bug#14303860)。
・ SET var_name = VALUES ( col_name ) によってサーバが終了する可能性があった。 SET コンテキストにはカラム名がなく、ステートメントが ER_BAD_FIELD_ERROR を返すため、現在はこの構文が禁止されている(Bug#14211565)。
・ クライアント/サーバプロトコルの COM_CHANGE_USER コマンドが、コマンドパケット内の文字セット番号を正しく使用しなかったため、パケット内の別の値を間違って文字セット変換した(Bug#14163155)。
・ OUTER JOIN を伴うサブクエリが別の SELECT のカラムを参照する場合、間違った結果を返す可能性があった(Bug#13068506)。
・ Microsoft Windowsでは、切り替えるMySQLServerのバージョンが同一である場合、MSIパッケージがライセンスの切り替え(コミュニティエディションとコマーシャルエディション間の切り替え)を許可するようになった(Bug#13071597)。
・ mysql_install_db は、ステートメントで権限テーブルに書き込まれたホスト名内の 「 _ 」 をエスケープしなかった(Bug#11746817)。
・ メモリ不足エラーの処理中にメモリ不足の状況が発生し、エラー処理の反復が発生する可能性があった(Bug#49514、Bug#11757464)。
・ オプティマイザが、ルースインデックススキャンによるアクセスが適さない一部のクエリに対して、このアクセス方法を使用した(Bug#42785、Bug#11751794)。
・ ある文字セットと照合を持つビューに異なる文字セットと照合が定義されているビューがダンプファイルに含まれていた場合、このダンプファイルをリストアしようとすると、"illegal mix of collations"エラーが発生して失敗した(Bug#65382、Bug#14117025)。
・ ユーザ変数が引数として提供され、複数の行で操作が実行されると、 REPLACE() 関数の結果が正しくならなかった(Bug#49271、Bug#11757250)。
・ BLOB カラムで UNION ALL を実行すると、結果が正しくならない可能性があった(Bug#50136、Bug#11758009)。
・ メモリが少ない状況でビューにアクセスすると、デバッグアサーションが発生する可能性があった(Bug#39307、Bug#11749556)。
・ max_connections を現在開かれている接続の数よりも小さい値に設定すると、サーバが終了した(Bug#44100、Bug#11752803)。
・ 一部のビューから返されるカラムについて、間違ったメタデータが生成される可能性があった(Bug#65379、Bug#14096619)。
・ デバッグビルドで、 SELECT ... FROMDUAL がネストするサブクエリを含むクエリにより、表明が発生する場合があった(Bug#60305、Bug#11827369)。
・ --datadir オプションを使用せずにサーバが起動された場合、 datadir システム変数に対して SHOW VARIABLES が空の値を表示する可能性があった(Bug#60995、Bug#12546953)。
・ CMake は、MySQLに必要な特定の関数がシステムの zlib にあるかどうかをチェックしなかったため、ビルドエラーが発生した。現在はチェックを行い、関数が見つからない場合、バンドルされた zlib にフォールバックする(Bug#65856、Bug#14300733)。