Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


MySQL 5.6 リファレンスマニュアル  /  ...  /  CREATE TABLE ... SELECT ステートメントのレプリケーション

17.4.1.5 CREATE TABLE ... SELECT ステートメントのレプリケーション

このセクションでは、MySQL が CREATE TABLE ... SELECT ステートメントを複製する方法について説明します。

MySQL 5.6 は、CREATE TABLE ... SELECT ステートメントが、このステートメントで作成されたテーブル以外のテーブルで変更を行うことを許可しません。これは、以前のバージョンの MySQL (これらのステートメントがそうすることを許可していました) からの動作の変更です。これは、MySQL 5.6 以降のスレーブと前のバージョンの MySQL を実行しているマスターとの間でステートメントベースレプリケーションを使用するときに、マスター上のほかのテーブルで変更を行う CREATE TABLE ... SELECT ステートメントがスレーブ上で失敗し、レプリケーションが停止することを意味します。これが発生しないようにするには、行ベースレプリケーションを使用するか、問題のステートメントをマスター上で実行する前に書き直すか、マスターを MySQL 5.6 (以降) にアップグレードしてください。(マスターをアップグレードすることを選択する場合、このような CREATE TABLE ... SELECT ステートメントは、ほかのテーブルでの副作用をなくすように書き直さないかぎり、アップグレード後に失敗することに留意してください。)これは、行ベースのプリケーションを使用するときは問題になりません。このステートメントのログが、CREATE TABLE ... SELECT 全体としてではなく、CREATE TABLE ステートメントとして記録される (テーブルデータへの変更のログが行挿入イベントとして記録される) ためです。

これらの動作は MySQL バージョンに依存しません。

  • CREATE TABLE ... SELECT は常に暗黙的コミットを実行します (セクション13.3.3「暗黙的なコミットを発生させるステートメント」)。

  • 目的のテーブルが存在しない場合、ロギングは次のように発生します。IF NOT EXISTS が存在するかどうかは重要ではありません。

    • STATEMENT または MIXED 形式: ステートメントは、書き込まれたものとしてログに記録されます。

    • ROW 形式: ステートメントは、CREATE TABLE ステートメントおよび一連の行挿入イベントとしてログに記録されます。

  • ステートメントが失敗した場合、ログは記録されません。これには、宛先テーブルが存在し、IF NOT EXISTS が指定されていないケースが含まれます。

宛先テーブルが存在し、IF NOT EXISTS が指定されているときは、MySQL はバージョンに依存する方法でステートメントを処理します。

5.1.51 より前の MySQL 5.1 および 5.5.6 より前の MySQL 5.5 で (これがオリジナルの動作です):

  • STATEMENT または MIXED 形式: ステートメントは、書き込まれたものとしてログに記録されます。

  • ROW 形式: ステートメントは、CREATE TABLE ステートメントおよび一連の行挿入イベントとしてログに記録されます。

5.1.51 以降の MySQL 5.1 で:

  • STATEMENT または MIXED 形式: ステートメントは、CREATE TABLE および INSERT INTO ... SELECT ステートメントの同等ペアとしてログに記録されます。

  • ROW 形式: ステートメントは、CREATE TABLE ステートメントおよび一連の行挿入イベントとしてログに記録されます。

5.5.6 以降の MySQL 5.5 で:

  • 何も挿入されず、ログが記録されません。

これらのバージョン依存が発生するのは、MySQL 5.5.6 で、目的のテーブルがすでに存在する場合に行を挿入しないように CREATE TABLE ... SELECT の処理が変更されたことと、MySQL 5.1.51 で、このようなステートメントを 5.1 マスターから 5.5 スレーブに複製する際の上位互換性を保持するように変更されたことによります。詳細については、セクション13.1.17.1「CREATE TABLE ... SELECT 構文」を参照してください。


User Comments
Sign Up Login You must be logged in to post a comment.