[MySQL] 복제(Replication)과 트리거(Trigger) 관계

명령문 기반 복제를 사용하면 마스터에서 실행되는 트리거가 슬레이브에서도 실행됩니다.
행(ROW) 기반 복제를 사용하면 마스터에서 실행된 트리거가 슬레이브에서 실행되지 않습니다. 대신 트리거 실행으로 인한 마스터의 행 변경 사항이 복제되고 슬레이브에 적용됩니다.
행 기반 복제에서 슬레이브에 트리거가 있을 때 마스터 변경사항이 슬레이브에 적용되고 이 넘어온 데이터가 슬레이브 트리거로 인해 다시 수행되게 됩니다. 즉 슬레이브에 두번 적용되어 마스터와 슬레이브에 다른 데이터가 생성됩니다.
그래서 행 기반에서는 트리거가 작동하지 않게끔 설계되어 있습니다.

트리거를 마스터와 슬레이브 모두에서 실행하려면 명령문 기반 복제를 사용합니다. 그러나 슬레이브 트리거를 사용하기 위해 명령문 기반 복제를 독점적으로 사용할 필요는 없습니다.
이 효과를 원하는 명령문에 대해서만 명령문 기반 복제로 전환하고 나머지 시간에는 행 기반 복제를 사용하는 것으로 충분합니다.

AUTO_INCREMENT 컬럼을 업데이트하는 트리거(또는 함수)를 호출하는 명령문은 명령문 기반 복제를 사용하여 올바르게 복제되지 않습니다.
MySQL 5.7은 이러한 문을 안전하지 않은 것으로 표시합니다.

Designed by JB FACTORY