MySQL Master / Slave 복제에서 Slave에 쓰면 어떻게됩니까?


17

몇 가지 질문

  • 슬레이브에 영향을 줄 수있는 마스터의 테이블에 대한 삽입 / 업데이트 / 삭제가있을 때까지 슬레이브 항목이 유지됩니까?

  • 그렇지 않은 경우 슬레이브가 슬레이브와 삭제되거나 해당 엔트리를 마스터에 수동으로 복사하여 슬레이브와 마스터가 동기화되도록하려면 어떻게해야합니까?

  • 가장 중요한 것은 테이블이 동기화되지 않았 음을 어떻게 감지합니까?


질문을 올바르게 설명해주십시오 ...
Abdul Manaf

1
마스터 / 슬레이브 관계가 마스터에서 슬레이브로의 단방향 동기화가 아닙니까? 이런 종류의 설정에서 슬레이브에 쓰면 어떻게 될지 묻습니다.
kfmfe04

답변:


14

Slave에서 INSERT / UPDATE / DELETE 문을 직접 수행하지 않는 한 Slave는 정상입니다. 그렇지 않으면 슬레이브의 mydb.mytable에 새 행을 삽입하고 복제를 통해 슬레이브가 나중에 동일한 기본 키를 사용하여 mydb.mytable에 대한 행의 INSERT를 감지하면 MySQL 복제가 중단 될 수 있습니다. 이 오류 1062 (중복 키)가 발생합니다.

MySQL 복제를 중단하지 않고 슬레이브에 쓸 수있는 유일한 방법은 다음과 같습니다.

  • 마스터에는 데이터베이스 db1, db2, db3이 있습니다.
  • 슬레이브는 마스터에서 데이터베이스 db1, db2, db3을 복제 중입니다.
  • 당신 CREATE DATABASE db4;은 노예에서 실행
  • 슬레이브의 db4에만 INSERT / UPDATE / DELETE를 수행합니다.
  • 슬레이브의 db1, db2, db3에만 INSERT / UPDATE / DELETE를 수행하지 않습니다.

도구를 다운로드하지 않고 마스터와 슬레이브가 동기화되지 않는 것을 감지하려면 테이블을 선택하고 마스터의 테이블과 슬레이브의 동일한 테이블 사본에 대해 CHECKSUM TABLE 을 실행 하십시오.

table이 있으면 이에 mydb.mytable대해 명령을 실행하십시오.

mysql> CHECKSUM TABLE mydb.mytable;

값이 동일하게 나타나지 않으면 동기화되지 않은 것입니다.

대량의 테이블을 대량으로 검사하려면 Percona의 MAATKIT을 다운하십시오. 두 가지 특정 도구가 필요합니다 (Percona에는 현재 더 많이 홍보되고있는 MAATKIT에서 포크 한 Percona 툴킷도 있습니다)

또는

pt-table-checksumMaster 및 Slave의 모든 테이블에 대해 CHECKSUM TABLE을 수행합니다. 특정 데이터베이스에서만 모든 데이터베이스를 수행하도록 구성 할 수 있습니다.

pt-table-sync모든 테이블에 대해 슬레이브에서 실행될 수 있습니다. --print 및 --sync-to-master 옵션을 사용하면 마스터와 완벽하게 일치하도록 슬레이브에서 어떤 SQL 문을 실행해야하는지 확인할 수 있습니다. 이 도구는 기본 키 또는 고유 키가없는 테이블에서는 작동하지 않습니다.

나는 수년간 MAATKIT을 사용해 왔습니다. 난 여전히한다. Percona Toolkit을 아직 시도하지 않았지만 MAATKIT과 동일한 품질이어야합니다.


자세한 답변을 위해 ty. 더 많은 질문이 있다고 생각했지만 귀하의 답변이 모든 경우에 적용되었다고 생각합니다 (pt-table-sync가 실제로 유용한 것 같습니다).
kfmfe04
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.