17.4.1.1 Replication and AUTO_INCREMENT
AUTO_INCREMENT
, LAST_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
테이블에는 자동 증가 컬럼이 유일한 또는 가장 왼쪽의 컬럼 인 키가 하나 이상 있어야하기 때문입니다.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
의 모든 컬럼의 이름을 지정해야합니다.위의 지침은
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의 문제" 를 참조하십시오.