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


17.4.1.1 レプリケーションと AUTO_INCREMENT

AUTO_INCREMENTLAST_INSERT_ID()、および TIMESTAMP 値のステートメントレベルレプリケーションは正しく行われますが、次の例外があります。

  • MySQL 5.6.10 より前のステートメントベースレプリケーションを使用するときは、スレーブ上のテーブル内の AUTO_INCREMENT カラムは、マスター上の同じカラムに一致する必要があります。つまり、AUTO_INCREMENT カラムは AUTO_INCREMENT カラムに複製される必要があります。(Bug #12669186)

  • AUTO_INCREMENT カラムを更新するトリガーまたは関数を呼び出すステートメントは、ステートメントベースレプリケーションでは正しく複製されません。MySQL 5.6 では、このようなステートメントは安全でないとマークされます。(Bug #45677)

  • 複合主キーを持ち、この複合キーの先頭カラムでない AUTO_INCREMENT カラムを含むテーブルに INSERT を実行することは、ステートメントベースロギングまたはレプリケーションにとって安全ではありません。MySQL 5.6.6 以降では、このようなステートメントは安全でないとマークされます。(Bug #11754117、Bug #45670)

    この問題は InnoDB ストレージエンジンを使用するテーブルに影響しません。AUTO_INCREMENT カラムを持つ InnoDB テーブルには、自動インクリメントカラムが唯一または左端のカラムであるキーが少なくとも 1 つ必要であるためです。

  • ALTER TABLE でテーブルに AUTO_INCREMENT カラムを追加した場合、行の順序がスレーブとマスターで同じにならない場合があります。これが発生するのは、行が番号付けされる順序が、テーブルに使用される固有のストレージエンジンおよび行が挿入された順序に依存するためです。マスターとスレーブで同じ順序を持つことが重要である場合は、行を並べ替えてから AUTO_INCREMENT 番号を割り当てる必要があります。カラム col1col2 を持つテーブル t1AUTO_INCREMENT カラムを追加するものと仮定すると、次のステートメントは t1 と同じであるけれども AUTO_INCREMENT カラムを持つ新しいテーブル t2 を生成します。

    CREATE TABLE t2 LIKE t1;
    ALTER TABLE t2 ADD id INT AUTO_INCREMENT PRIMARY KEY;
    INSERT INTO t2 SELECT * FROM t1 ORDER BY col1, col2;
    重要

    マスターとスレーブの両方で同じ順序を保証するには、ORDER BY 句で t1すべてのカラムの名前を指定する必要があります。

    上記の指示には CREATE TABLE ... LIKE の制限が適用されます。外部キー定義は DATA DIRECTORY および INDEX DIRECTORY テーブルオプションと同様に無視されます。テーブル定義がこれらの特性を含む場合、t1 の作成に使用したものと同じであるけれども AUTO_INCREMENT カラムを追加した CREATE TABLE ステートメントを使用して、t2 を作成してください。

    AUTO_INCREMENT カラムを持つコピーを作成および移入するために使用する方法にかかわらず、最終手順は元のテーブルを削除してコピーの名前を変更することです。

    DROP t1;
    ALTER TABLE t2 RENAME t1;

    セクションB.5.7.1「ALTER TABLE での問題」も参照してください。


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