|
MySQL 5.1.38 リリースノート (日本語翻訳)
案MySQL5.1.38より、従来リリースから継承したビルトインバージョンの
InnoDB
に加え、
InnoDBPlugin
がMySQL5.1リリースに追加されました。この
InnoDBPlugin
のバージョンは
1.0.4
で、ベータ品質と見なされています。
InnoDBPlugin
では、新機能が追加され、パフォーマンスとスケーラビリティが向上します。また、信頼性が強化され、柔軟性および使い勝手を高める新たな機能が提供されます。
InnoDBPlugin
の主な機能として、「高速インデックス作成」、テーブルおよびインデックスの圧縮、ファイル形式の管理、新たな
INFORMATION_SCHEMA
テーブル、容量の調整、複数のバックグラウンドI/Oスレッド、グループコミットなどがあります。
これらの機能の詳細については、
InnoDBPlugin
のマニュアル(
http://www.innodb.com/products/innodb_plugin/plugin-documentation
)を参照してください。MySQLでの
InnoDB
の使用に関する一般情報については、
13.6「TheInnoDBStorageEngine」
を参照してください。
InnoDBPlugin
は、ソースディストリビューションおよびバイナリディストリビューションに含まれています。ただし、RHEL3、RHEL4、SuSE9(x86、x86_64、ia64)、および汎用LinuxRPMパッケージには含まれていません。
InnoDBPlugin
を使用するには、ビルトインバージョンの
InnoDB
を無効にし、代わりに
InnoDBPlugin
を使用するようサーバに指示する必要があります。これを行うには、
my.cnf
ファイルで以下の行を使用します。
[mysqld] ignore-builtin-innodb plugin-load=innodb=ha_innodb_plugin.so
plugin-load
オプションの
innodb
はプラグインに関連付ける名前、
ha_innodb_plugin.so
はプラグインコードが含まれる共有オブジェクトライブラリの名前です。拡張子
.so
はUnix系システムの場合です。HP-UXonHPPA(11.11)またはWindowsの場合は、拡張子は
.so
の代わりにそれぞれ
.sl
または
.dll
になります。
サーバが起動時にこのプラグインを見つけられない場合、プラグインディレクトリのパス名を指定してください。たとえば、プラグインがMySQLインストールディレクトリ下の
lib/mysql/plugin
に格納され、MySQLが
/usr/local/mysql
にインストールされている場合、
my.cnf
ファイルで以下の行を使用します。
[mysqld] ignore-builtin-innodb plugin-load=innodb=ha_innodb_plugin.so plugin_dir=/usr/local/mysql/lib/mysql/plugin
上記の例では、
InnoDBPlugin
のストレージエンジン部分をアクティブにする方法を示しましたが、このプラグインでは、InnoDBに関連する
INFORMATION_SCHEMA
テーブルもいくつか実装されます(これらのテーブルの詳細については、
http://www.innodb.com/doc/innodb_plugin-1.0/innodb-information-schema.html
を参照)。これらのテーブルを有効にするには、
plugin-load
オプションの値として、さらに
テーブル名
=
ライブラリ
のペアを追加します。
[mysqld] ignore-builtin-innodb plugin-load=innodb=ha_innodb_plugin.so ;innodb_trx=ha_innodb_plugin.so ;innodb_locks=ha_innodb_plugin.so ;innodb_cmp=ha_innodb_plugin.so ;innodb_cmp_reset=ha_innodb_plugin.so ;innodb_cmpmem=ha_innodb_plugin.so ;innodb_cmpmem_reset=ha_innodb_plugin.so
ここでは分かりやすくするために、
plugin-load
オプションの値を複数の行に分けて記載しましたが、実際に
my.cnf
に記述する際は、スペースを入れずに1行でオプション値を指定します。Windowsの場合は、各
.so
拡張子を
.dll
に置き換えます。
サーバの起動後、
SHOWPLUGINS
ステートメントを使用して、
InnoDBPlugin
がロードされたことを確認します。たとえば、ストレージエンジンと
INFORMATION_SCHEMA
テーブルをロードした場合、出力に以下のような行が含まれます。
mysql>SHOWPLUGINS; +---------------------+--------+--------------------+---------------------... |Name|Status|Type|Library... +---------------------+--------+--------------------+---------------------... ... |InnoDB|ACTIVE|STORAGEENGINE|ha_innodb_plugin.so... |INNODB_TRX|ACTIVE|INFORMATIONSCHEMA|ha_innodb_plugin.so... |INNODB_LOCKS|ACTIVE|INFORMATIONSCHEMA|ha_innodb_plugin.so... |INNODB_CMP|ACTIVE|INFORMATIONSCHEMA|ha_innodb_plugin.so... |INNODB_CMP_RESET|ACTIVE|INFORMATIONSCHEMA|ha_innodb_plugin.so... |INNODB_CMPMEM|ACTIVE|INFORMATIONSCHEMA|ha_innodb_plugin.so... |INNODB_CMPMEM_RESET|ACTIVE|INFORMATIONSCHEMA|ha_innodb_plugin.so... +---------------------+--------+--------------------+---------------------...
MySQLをソースディストリビューションからビルドする場合、
InnoDBPlugin
はデフォルトでビルドされるストレージエンジンの1つです。MySQLをビルドする際は、たとえば
2.10「MySQLInstallationUsingaSourceDistribution」
の手順に従うなど、通常の方法で行います。ビルドが完了すると、
storage/innodb_plugin
ディレクトリ下にプラグインの共有オブジェクトファイルが作成されています。
makeinstall
を実行すれば、このファイルがプラグインディレクトリにインストールされます。その後、前述のバイナリディストリビューションでの説明のとおり、
InnoDBPlugin
を使用するようMySQLを構成します。
gcc
を使用する場合、
gcc
3.xでは
InnoDBPlugin
をコンパイルできません。代わりに
gcc
4.xを使用してください。
追加または変更された機能:
・
レプリケーション
:ステートメントベースログ(SBL)を使用する場合、SBLにとってアンセーフなステートメントを繰り返し呼び出すと、各ステートメントについて警告メッセージがエラーログに書き込まれ、この動作を無効にする方法がなかった。今回のリリースでは、
log_warnings
変数が0より大きい場合のみ、サーバは、ステートメントベースログにとってアンセーフなステートメントのメッセージを記録するようになった(
Bug#46265
)。
・文書化されていない
TRANSACTIONAL
および
PAGE_CHECKSUM
キーワードが文法から削除された(
Bug#45829
)。
・これまで、
SELECT...INTOOUTFILE
は、文字セットを変換せずにカラム値をダンプしていたため、カラムごとに使用している文字セットが異なる場合に、エラーが生成されることなく、インポートできないデータファイルが生成される可能性があった。その結果、
--tab
オプション(
SELECT...INTOOUTFILE
によってデータをダンプ)が指定されている場合に、
mysqldump
で
--default-character-set
オプションが無視されていた。
今回のリリースでは、
INTOOUTFILE
の後に
CHARACTERSET
句を続け、ダンプ値の変換先文字セットを指定できるようになった。また、
mysqldump
により、データをダンプする際に使用される
SELECT...INTOOUTFILE
ステートメントに
CHARACTERSET
句が追加され、
--tab
が指定されていても
--default-character-set
が無視されなくなった。
SELECT...INTOOUTFILE
のその他の変更点として、
ENCLOSEDBY
および
ESCAPEDBY
引数が単一文字である必要があること、および非ASCIIのフィールドまたは行区切り文字が指定されている場合に
SELECT...INTOOUTFILE
および
LOADDATAINFILE
によって警告が生成されることが挙げられる(
Bug#30946
)。
・今回のリリースでは、MySQL
euckr
文字セットに、
euckr
をMicrosoft
cp949
文字セット互換にする拡張コード[81...FE][41..5A,61..7A,81..FE]を格納できるようになった。
修正されたバグ:
・ パーティショニング :無効なパーティション定義または矛盾したパーティション定義を使用してテーブルを作成しようとすると、サーバがクラッシュしていた。このようなステートメントの例を以下に示す。
CREATETABLEt2(s1INT,s2INT) PARTITIONBYLIST(s1)SUBPARTITIONBYHASH(s2)SUBPARTITIONS1 ( PARTITIONp1VALUESIN(1), PARTITIONp2VALUESIN(2)(SUBPARTITIONp3) );
( Bug#46354 )
・
パーティショニング
:デバッグビルドのMySQLを使用している場合、1つ以上の
DOUBLE
カラムで同じインデックスが使用されているパーティションドテーブルに対してクエリを実行すると、サーバで表明違反が発生していた(
Bug#45816
)。
・
パーティショニング
:ユーザ定義のパーティショニングが行われているテーブルに対する
RENAMETABLE
操作に失敗すると、一部のテーブルファイル名のみが変更され、テーブルが使用不可のままになっていた(
Bug#30102
)。
・
レプリケーション
:非トランザクショナルテーブルを変更するステートメントが失敗すると、トランザクショナルキャッシュがフラッシュされ、これによって実行履歴とログ履歴に矛盾が生じていた。今回のリリースでは、
COMMIT
または
ROLLBACK
を発行しない限り、トランザクショナルキャッシュがフラッシュされないようになった(
Bug#46129
)。
・
レプリケーション
:クエリに失敗した場合、またはクエリに成功しても取得された結果が空の場合、内部関数
get_master_version_and_clock()
(
sql/slave.cc
で定義)でエラーが無視され、そのまま処理が進められていた。今回のリリースでは、ネットワークの一時的な問題によってクエリに失敗した場合、この関数はマスタへの再接続を試み、それ以外の場合は失敗するようになった。また、同じシステム変数がマスタ上に存在しない場合(マスタのMySQLのバージョンがスレーブより大幅に古い場合)、I/Oスレッドが警告を出力するようになった(
Bug#45214
)。
・
レプリケーション
:
MIXED
ログ形式を使用している場合、テンポラリテーブルを作成し、ログ形式を
ROW
に切り替える更新を実行した後も、その形式の切り替えが存続していた。これにより、テンポラリテーブルをドロップするまで、テンポラリテーブルに対する以降のDDLステートメントがバイナリログに書き込まれなくなっていた(
Bug#43046
)。
Bug#40013 も参照。
この回帰は Bug#20499 で報告されていた。
・
レプリケーション
:
--log-bin-trust-function-creators
オプションが有効でない場合、
CREATEFUNCTION
には
DETERMINISTIC
、
NOSQL
、または
READSSQLDATA
のいずれかの修飾子が必要である。ステートメントベースモードを使用している場合、ストアドファンクションの実行時に同じルールに従う必要があるが、実際には
DETERMINSTIC
で定義された関数のみ実行可能だった。また、不正なエラーが生成されていた(ER_BINLOG_UNSAFE_ROUTINEではなくER_BINLOG_ROW_RBR_TO_SBR)。
今回のリリースでは、この点に関して、ストアドファンクションの実行と作成を両立できるようになった。
STATEMENT
モードで上記のいずれかの修飾子なしでストアドファンクションを実行した場合、正しいエラーが生成され、
NOSQL
または
READSSQLDATA
、あるいはその両方を使用して(すなわち
DETERMINSTIC
を使用せずに)定義された関数を実行できるようになった(
Bug#41166
)。
・RPMパッケージにテストスイートが含まれていなかった( Bug#46834 )。
・不正なインデックス最適化が、不正な結果またはサーバクラッシュの原因となる可能性があった( Bug#46454 )。
・サーバの起動時に、
max_join_size
システム変数値が調整されることを示す警告が出力されていた(これらの警告は無害だが、ユーザが重要な警告として捉える可能性があった)(
Bug#46385
)。
・テーブルが満杯状態であるなどのエラーの後に
INSERTIGNORE
を実行すると、デバッグビルドで表明違反が発生する可能性があった(
Bug#46075
)。
・アイテムをサブクエリから外部クエリに移動する最適化により、サーバクラッシュが発生する可能性があった( Bug#46051 )。
・Valgrindのいくつかの警告が修正された( Bug#46003 、 Bug#46034 、 Bug#46042 )。
・デフォルトデータベースが選択されていない場合、
CREATETABLE...SELECT
によりサーバクラッシュが発生する可能性があった(
Bug#45998
)。
・重複が存在する場合、
MERGE
テーブルに対して
REPLACE
を実行すると、MySQLServerがクラッシュしていた(
Bug#45800
)。
・SSL初期化時にSSLファイルの読み取りに問題が発生すると、サーバは、エラーログではなく
stderr
にエラーメッセージを書き込んでいた(
Bug#45770
)。
・RPMパッケージにおけるMySQLABからSunMicrosystems,Inc.へのベンダ名の変更が、RPMパッケージを使用してMySQLをアップグレードしたときにグレースフルに処理されなかった( Bug#45534 )。
・GUIインストーラを使用したWindowsのインストールが失敗し、以下のメッセージが表示されていた。
MySQLServer5.1SetupWizardendedprematurely ThewizardwasinterruptedbeforeMySQLServer5.1.couldbecompletelyinstalled. Yoursystemhasnotbeenmodified.Tocompleteinstallationatanothertime,pleaserun setupagain. ClickFinishtoexitthewizard
この問題は、一部の環境で正常に実行できない可能性のあるMSIインストーラの手順が原因である( Bug#45418 )。
・圧縮されたクライアント/サーバプロトコルを使用すると、無効なメモリ読み取りが行われる可能性があった( Bug#45031 )。
・
mysql_real_connect()
CAPI関数は、ホスト名について返された最初のIPアドレスにのみ接続を試行していた。ホスト名が複数のIPアドレスにマップされ、最初に返されたIPアドレスにサーバがバインドされていない場合、これが問題になる可能性があった。今回のリリースでは、
mysql_real_connect()
は、ドメイン名がマップされているすべてのIPv4/6アドレスへの接続を試行するようになった(
Bug#45017
)。
・無効な入力により、解析時に無効なメモリ読み取りが行われる可能性があった( Bug#45010 )。
・AIX tar ファイルのディストリビューションに含まれる一部のファイルが正しいパーミッションで圧縮解除されなかった( Bug#44647 )。
・デバッグビルドでは、ストアドプロシージャをプリペアドステートメントとして実行すると、表明違反が発生することがあった( Bug#44521 )。
・
mysql_stmt_execute()
を使用してストアドプロシージャを呼び出すと、サーバクラッシュが発生する可能性があった(
Bug#44495
)。
・インスタンス削除後に新規インスタンスを作成すると、セキュリティ設定を正しく適用できないため、インストールが正常に完了しなかった( Bug#44428 )。
・
--csv
オプションが引数なしで指定された場合、
mysqlslap
でこの引数が無視されていた(
Bug#44412
)。
・
--init-file
で指定されたファイル内でイベントスケジューラを有効にすると、サーバクラッシュが発生していた(
Bug#43587
)。
・サーバが必ずしも
hash_init()
関数呼び出しの戻り値をチェックしなかった(
Bug#43572
)。
・今回のリリースでは、テーブルキャッシュロック(
LOCK_open
)は適応mutexになっている。これにより、このロックが過度に競合しているワークロードにおけるパフォーマンスが向上する(
Bug#43435
)。
・ mysqladmin--count= X --sleep= Y が、最後の繰り返しから終了まで、不正に Y 秒遅らせていた( Bug#42639 )。
・一部のプラットフォームでスタック成長テストに失敗し、これがサーバクラッシュの原因となっていた( Bug#42213 )。
・
extended-status
と一緒に
--vertical
または
--relative
を使用すると、
mysqladmin
に、すべての変数を追跡するために十分な空間が割り当てられなかった(
Bug#40395
)。
・ログテーブルのパーティショニングにより、サーバクラッシュが発生していた( Bug#40281 )。
・
UPDATE
および
DELETE
ステートメントでクイックアクセスメソッドを使用して行を検索すると、クイック条件の評価中に、致命的エラーをクライアントに送信済みかどうかがチェックされなかった。その結果、(エラーに続いて)誤ったOKがクライアントに送信され、エラーが不正に警告に変換されていた(
Bug#40113
)。
・
SHOWPROCESSLIST
が、同時セッションで実行されたストアドプロシージャの解放メモリにアクセスする可能性があった(
Bug#38816
)。
・Windowsへのインストール中、[MySQLInstanceConfigurationWizard]ウィンドウが、使いにくい小さいサイズで開くことがあった( Bug#38723 )。
・ make_binary_distribution により必ずしも正しいディストリビューション名が生成されなかった( Bug#37808 )。
・
SELECTMATCH(a)AGAINST('test')FROMt1ORDERBYMATCH(a)AGAINST('test')
のように、SELECTリストと
ORDERBY
句に重複した
MATCH()
関数呼出しを含むプリペアドステートメントを実行すると、サーバがクラッシュした(
Bug#37740
)。
・ビューへの
mysqldump--tab
の出力に、
IFEXISTS
限定子のない
DROPTABLE
ステートメントが含まれていた(
Bug#37377
)。
・
mysql_upgrade
は、メッセージを出力することなく
--basedir
および
--datadir
オプションを無視し、後方互換性を受け入れていた。今回のリリースでは、警告を出力するようになった(
Bug#36558
)。
・
mysqlimport
は、
--use-threads
オプションに必要なスレッドサポートが有効になるよう必ずしも正しくコンパイルされなかった(
Bug#32991
)。
・
--fix-table-names
および
--all-in-1
オプションが両方指定された場合、
mysqlcheck
はテーブル名の修正に失敗していた(
Bug#31821
)。
・PIDファイルを削除せずにMySQLServerを強制終了し、 mysql.serverstop でサーバを停止しようとすると、タイムアウトになるまでに900秒かかった( Bug#31785 )。
・GUIインストーラを使用したWindowsへのインストール中、インストーラがMySQLサービスのインストール完了まで待たないためにインストールに失敗し、
root
パスワードなどのセキュリティ設定が正しく適用されない可能性があった(
Bug#30525
)。
・ mysql による一部の結果セット行の末尾に余分なスペースが含まれていた( Bug#29622 )。
・ mysql クライアントによる、さまざまな出力形式のカラムデータに含まれるNULバイトの処理が一貫していなかった( Bug#28203 )。
・ mysqlimport で、テーブル識別子とファイル名が正しく引用符で囲まれなかった( Bug#28071 )。
・Windowsサービスのインストール時に、コマンド行構成パラメータを引用符で囲むと、引用符が値だけでなく、コマンド行オプション全体を囲むように不正に配置される可能性があった( Bug#27535 )。
・
readline
ライブラリと、
Space
を
magic-space
関数にマップする
.inputrc
ファイルを使用して
mysql
クライアントをビルドすると、スペースを入力できなくなっていた(
Bug#27439
)。
・
InnoDB
は、同時トランザクション数の制限(1023)に達すると、それに関する説明的なメッセージをエラーログに書き込むが、クライアントには誤解を招く可能性のあるメッセージを返していた。または、表明違反が発生した(
Bug#18828
)。