このページは機械翻訳したものです。
AUTO_INCREMENT、LAST_INSERT_ID() および TIMESTAMP の値のステートメントベースのレプリケーションは、次の例外の対象となります:
AUTO_INCREMENTカラムを更新するトリガーまたは関数を呼び出すステートメントは、ステートメントベースレプリケーションでは正しく複製されません。 これらのステートメントは安全でないとマークされます。 (Bug #45677)-
複合主キーを持ち、この複合キーの先頭カラムでない
AUTO_INCREMENTカラムを含むテーブルにINSERTを実行することは、ステートメントベースロギングまたはレプリケーションにとって安全ではありません。 これらのステートメントは安全でないとマークされます。 (Bug #11754117、Bug #45670)この問題は
InnoDBストレージエンジンを使用するテーブルに影響しません。AUTO_INCREMENT カラムを持つInnoDBテーブルには、自動インクリメントカラムが唯一または左端のカラムであるキーが少なくとも 1 つ必要であるためです。 -
ALTER TABLEを使用してテーブルにAUTO_INCREMENTカラムを追加すると、レプリカとソースで同じ順序で行が生成されない場合があります。 これが発生するのは、行が番号付けされる順序が、テーブルに使用される固有のストレージエンジンおよび行が挿入された順序に依存するためです。 ソースとレプリカで順序が同じであることが重要な場合は、AUTO_INCREMENT番号を割り当てる前に行を順序付けする必要があります。 カラムcol1とcol2を持つテーブルt1にAUTO_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の all カラムを指定する必要があります。上記の指示には
CREATE TABLE ... LIKEの制限が適用されます。外部キー定義はDATA DIRECTORYおよびINDEX DIRECTORYテーブルオプションと同様に無視されます。 テーブル定義がこれらの特性を含む場合、t1の作成に使用したものと同じであるけれどもAUTO_INCREMENTカラムを追加したCREATE TABLEステートメントを使用して、t2を作成してください。AUTO_INCREMENTカラムを持つコピーを作成および移入するために使用する方法にかかわらず、最終手順は元のテーブルを削除してコピーの名前を変更することです。DROP t1; ALTER TABLE t2 RENAME t1;セクションB.3.6.1「ALTER TABLE での問題」も参照してください。