2014-03-13 4 views
0

제 질문은 리눅스 서버를 사용하는 MySQL의 마스터 - 슬레이브 복제에 관한 것입니다.슬레이브가 삭제 복제를하지 못하게하기

나는 단지 MySQL에서 복제 테스트를하고 있는데, 슬레이브가 delete 문을 복제하지 못하도록하는 것이 가능한지 궁금하다.

슬레이브가 마스터에서 모든 삽입/삭제를 복제한다는 것을 알고 있습니다. 하지만 삽입물을 복제하기를 원합니다.

이것이 가능합니까?

+0

답변을 시도하기 전에 - '업데이트'에 대해 어떻게 생각합니까? –

+0

죄송합니다. 업데이트되지 않습니다. 삽입 및 삭제 만 가능합니다. 질문을 업데이트했습니다. – jeffry

답변

-1

는 잘 그것은 수행 할 수 있습니다

  • 는 SET SQL_LOG_BIN = 0을 사용하여; 삭제를 실행하기 전에 마스터에서 세션을 삭제하려면 을 입력하십시오. 따라서 바이너리 로그에 기록되지 않도록하십시오.
  • 삭제를 무시하기 위해 종속 테이블에서 BEFORE DELETE/UPDATE/INSERT 트리거를 구현하십시오.
    동일한 규칙이 모든 명령문에 적용됩니다!
+0

ok 자동으로 수행되기를 원합니다. 어떻게 접근 방식 2를 구현할 것을 제안합니까? – jeffry

+0

개체를 선택하고 필요에 따라 개체를 변경하십시오! (트리거 생성). –

1

this를 참조하십시오

이 작업을 수행하는 방법은 여러 가지가 있습니다.

  1. 당신의 삭제를 실행하기 전에 마스터 에 관련 세션에 대한 실행 SET SQL_LOG_BIN=0;. 그것이 바이너리 로그
  2. 에 기록되지 않습니다 그 방법은 삭제를 무시하도록 슬레이브에 BEFORE DELETE 트리거를 구현합니다.

    내가 복제하고 싶지 않은 문장에 대해 접근법 # 1을 사용합니다. SUPER 특권이 필요합니다.

+0

ok 자동으로 수행되기를 원합니다. 접근 방식 2를 구현하는 방법을 어떻게 제안합니까? – jeffry

+1

# 2는 불가능합니다. 예외를 throw하지 않고 트리거를 통해 쿼리 내에서 작업을 중지 할 수 없습니다. 그러면 행을 기반으로하는 바이너리 로그 이벤트에 대해 복제를 중지해야하며 슬레이브의 트리거는 실행되지 않습니다. 행 변경과 슬레이브에 대한 트리거 동작이 중복 될 때 마스터에서 트리거 발사로 인해 발생 된 데이터가 슬레이브로 전송됩니다. –

관련 문제