문제

좋습니다. 단일 마스터와 여러 슬레이브를 사용하여 설정을 실행하고 있습니다.모든 쓰기는 마스터를 거쳐 읽기에만 사용되는 슬레이브로 복제됩니다.

이제 삽입 시 트리거에 의해 호출되는 저장 프로시저(함수 아님)가 생겼습니다.MySQL 문서에 따르면, 복제 트리거의 경우 저장 프로시저가 실제로 저장 프로시저의 결과를 기록하는 동안 트리거에 대한 호출을 기록합니다.

그래서 내 질문은 내 트리거가 실행될 때 트리거와 트리거가 호출하는 프로시저의 결과를 모두 복제할 것인가입니다(결과적으로 프로시저는 효과적으로 두 번 실행됩니다).아니면 단순히 트리거를 복제하여 슬레이브가 자체적으로 저장 프로시저를 다시 실행하게 합니까?

감사해요

도움이 되었습니까?

해결책

MySQL 5.0(및 명령문 기반 바이너리 로깅이 있는 MySQL 5.1)에서는 호출 쿼리만 기록되므로 귀하의 경우에는 INSERT가 기록됩니다.

슬레이브에서 INSERT가 실행된 다음 슬레이브에서 트리거가 다시 실행됩니다.따라서 트리거는 슬레이브에 존재해야 하며, 존재한다고 가정하면 마스터와 정확히 동일한 방식으로 실행됩니다.

MySQL 5.1에는 변경되는 행만 기록하는 행 기반 바이너리 로깅이 있으므로 슬레이브에서 트리거가 다시 실행되지는 않지만 변경된 모든 행은 여전히 ​​전파됩니다.

다른 팁

Harrison의 훌륭한 답변 외에도 다음과 같은 것들이 있습니다.

  • 데이터베이스가 동기화(스키마, 데이터, 동일한 버전)되어 있다고 가정하면 제대로 작동합니다.
  • 그렇지 않다면 쿼리나 트리거에서 비결정적인 항목을 사용하고 있는 것일 수 있습니다.문제를 해결하세요.
  • 복제를 어떻게 사용하든 슬레이브가 항상 동기화되어 있는지 확인하려면 모니터링이 필요합니다.모니터링하지 않으면 (미묘하게) 동기화가 해제되어 눈치채지 못할 것입니다.MySQL에는 이를 확인하거나 수정하기 위한 자동 내장 기능이 없습니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top