몇 가지 질문
슬레이브에 영향을 줄 수있는 마스터의 테이블에 대한 삽입 / 업데이트 / 삭제가있을 때까지 슬레이브 항목이 유지됩니까?
그렇지 않은 경우 슬레이브가 슬레이브와 삭제되거나 해당 엔트리를 마스터에 수동으로 복사하여 슬레이브와 마스터가 동기화되도록하려면 어떻게해야합니까?
가장 중요한 것은 테이블이 동기화되지 않았 음을 어떻게 감지합니까?
몇 가지 질문
슬레이브에 영향을 줄 수있는 마스터의 테이블에 대한 삽입 / 업데이트 / 삭제가있을 때까지 슬레이브 항목이 유지됩니까?
그렇지 않은 경우 슬레이브가 슬레이브와 삭제되거나 해당 엔트리를 마스터에 수동으로 복사하여 슬레이브와 마스터가 동기화되도록하려면 어떻게해야합니까?
가장 중요한 것은 테이블이 동기화되지 않았 음을 어떻게 감지합니까?
답변:
Slave에서 INSERT / UPDATE / DELETE 문을 직접 수행하지 않는 한 Slave는 정상입니다. 그렇지 않으면 슬레이브의 mydb.mytable에 새 행을 삽입하고 복제를 통해 슬레이브가 나중에 동일한 기본 키를 사용하여 mydb.mytable에 대한 행의 INSERT를 감지하면 MySQL 복제가 중단 될 수 있습니다. 이 오류 1062 (중복 키)가 발생합니다.
MySQL 복제를 중단하지 않고 슬레이브에 쓸 수있는 유일한 방법은 다음과 같습니다.
CREATE DATABASE db4;
은 노예에서 실행도구를 다운로드하지 않고 마스터와 슬레이브가 동기화되지 않는 것을 감지하려면 테이블을 선택하고 마스터의 테이블과 슬레이브의 동일한 테이블 사본에 대해 CHECKSUM TABLE 을 실행 하십시오.
예
table이 있으면 이에 mydb.mytable
대해 명령을 실행하십시오.
mysql> CHECKSUM TABLE mydb.mytable;
값이 동일하게 나타나지 않으면 동기화되지 않은 것입니다.
대량의 테이블을 대량으로 검사하려면 Percona의 MAATKIT을 다운하십시오. 두 가지 특정 도구가 필요합니다 (Percona에는 현재 더 많이 홍보되고있는 MAATKIT에서 포크 한 Percona 툴킷도 있습니다)
또는
pt-table-checksum
Master 및 Slave의 모든 테이블에 대해 CHECKSUM TABLE을 수행합니다. 특정 데이터베이스에서만 모든 데이터베이스를 수행하도록 구성 할 수 있습니다.
pt-table-sync
모든 테이블에 대해 슬레이브에서 실행될 수 있습니다. --print 및 --sync-to-master 옵션을 사용하면 마스터와 완벽하게 일치하도록 슬레이브에서 어떤 SQL 문을 실행해야하는지 확인할 수 있습니다. 이 도구는 기본 키 또는 고유 키가없는 테이블에서는 작동하지 않습니다.
나는 수년간 MAATKIT을 사용해 왔습니다. 난 여전히한다. Percona Toolkit을 아직 시도하지 않았지만 MAATKIT과 동일한 품질이어야합니다.