レプリケーションは、AUTO_INCREMENT
、LAST_INSERT_ID()
そして TIMESTAMP
の値で正しく実行されますが、次のことに留意してください。
LAST_INSERT_ID()
を使用した格納手順は、ステートメント
ベースのバイナリ
ロを使用した場合に正しく複製できません。この制約は、MySQL
5.1.12 で修正の予定です。
AUTO_INCREMENT
カラムを ALTER
TABLE
でテーブルに加える場合には、行の順序がスレーブとサーバで同じにならない可能性がある。これは、行の順序が、
テーブルに使う特定の記憶エンジンあるいは行が挿入された順番に依存する場合に発生します。マスタとスレーブで同じ順序に並べる必要がある場合は、AUTO_INCREMENT
番号を割り当てる前に行を整列してください。テーブル
t1
に AUTO_INCREMENT
を加えると仮定した場合、t1
と同一の新たなテーブル t2
を、AUTO_INCREMENT
のカラムで、次のステートメントがこれを可能にします。
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;
これは、テーブル t1
にカラム
col1
および col2
があると仮定しています。
重要マスタとスレーブの両方で同一の順番を確保するには、t1
のすべてのカラムが ORDER
BY
節でレファレンスしている必要があります。
ここで示された手順は、CREATE TABLE ...
LIKE
制限を対象としています。DATA
DIRECTORY
および INDEX DIRECTORY
テーブル
オプションと同様に、外部キーの定義を無視します。テーブル定義がこれらの特性を含む場合、t1
に使用したものと同一の CREATE
TABLE
構文を使用して t2
を作成しますが、そのときはAUTO_INCREMENT
カラムの追加として行います。
AUTO_INCREMENT
属性をカラムに持つコピーを作成し、投入することに使用した方法に関係なく、このファイナル
ステップは、オリジナルのテーブルをドロップしてから、そのコピーの名前を変更します。
DROP t1; ALTER TABLE t2 RENAME t1;
項B.1.7.1. 「Problems with ALTER TABLE
」も参照してください。