[MySQL] 복제(Replication)과 트리거(Trigger) 관계
- Databases/MySQL
- 2021. 1. 26.
명령문 기반 복제를 사용하면 마스터에서 실행되는 트리거가 슬레이브에서도 실행됩니다.
행(ROW) 기반 복제를 사용하면 마스터에서 실행된 트리거가 슬레이브에서 실행되지 않습니다. 대신 트리거 실행으로 인한 마스터의 행 변경 사항이 복제되고 슬레이브에 적용됩니다.
행 기반 복제에서 슬레이브에 트리거가 있을 때 마스터 변경사항이 슬레이브에 적용되고 이 넘어온 데이터가 슬레이브 트리거로 인해 다시 수행되게 됩니다. 즉 슬레이브에 두번 적용되어 마스터와 슬레이브에 다른 데이터가 생성됩니다.
그래서 행 기반에서는 트리거가 작동하지 않게끔 설계되어 있습니다.
트리거를 마스터와 슬레이브 모두에서 실행하려면 명령문 기반 복제를 사용합니다. 그러나 슬레이브 트리거를 사용하기 위해 명령문 기반 복제를 독점적으로 사용할 필요는 없습니다.
이 효과를 원하는 명령문에 대해서만 명령문 기반 복제로 전환하고 나머지 시간에는 행 기반 복제를 사용하는 것으로 충분합니다.
AUTO_INCREMENT 컬럼을 업데이트하는 트리거(또는 함수)를 호출하는 명령문은 명령문 기반 복제를 사용하여 올바르게 복제되지 않습니다.
MySQL 5.7은 이러한 문을 안전하지 않은 것으로 표시합니다.
'Databases > MySQL' 카테고리의 다른 글
[MySQL] Replication 및 max_allow_packet (0) | 2021.02.14 |
---|---|
[MySQL] ERROR 1290 --secure-file-priv option 장애 (0) | 2021.02.04 |
[MySQL] InnoDB에서 Alter Table되는 진행상황을 Peformance Schema를 이용하여 모니터링 하기 (0) | 2021.01.26 |
[MySQL] Performance Schema 모니터링 테이블 - Replication 테이블 (2) | 2021.01.24 |
[MySQL] Performance Schema 모니터링 테이블 - Summary(요약) 테이블 (0) | 2021.01.24 |