엔지니어링
MySQL(Maria) DB binlog_format 에 따른 트리거 오동작
warpmemory
2020. 2. 18. 18:18
상황
- MariaDB 10.2.13 버전 사용 중
- 동일 버전의 일반적인 리플리케이션 환경으로 구성됨
- binlog_format 은 MIXED로 설정되어있음
- 트리거를 사용하여, 특정 동작을 수행하는데 레코드 삭제 시 트리가 동작하지 않음
원인
- binlog_format이 STATMENT인 경우 슬레이브에서도 트리거가 동작하는 반면, ROW일 경우에는 트리거가 동작하지 않음
- binlog_format이 MIXED로 설정되었을 때, 기본적으로 STATEMENT로 동작을 하다가, 안전하지 않은 명령문의 경우에 ROW로 동작하게 됨
- 소스상에서 안전을 위해서 UPDATE시 LIMIT 구문을 사용하는데, LIMIT 구문이 사용될 때 안전하지 않은 명령문으로 분류되어 해당 세션의 binlog_format이 ROW로 동작하게 됨
해결
- LIMIT 구문 삭제 후 정상 동작 확인됨