ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [AWS] Aurora MySQL와 표준 MySQL에서의 binary logging 차이점
    dev-ops/aws 2025. 5. 11. 16:50

     

    MySQL의 binary log

    MySQL의 binary log는 데이터 변경을 기록하는 방식에 따라 세 가지 형식(ROW, STATEMENT, MIXED)을 지원한다. 각 형식의 특징과 차이점은 다음과 같다.

    • ROW
      • 각 테이블 행(Row) 단위로 변경 내용을 binary log에 기록한다.
      • 어떤 SQL 문이 실행되었는지가 아닌, 어떤 행이 어떻게 변경되었는지를 기록한다.
      • 데이터 변경의 정확성이 높아 replication 시 데이터 불일치 문제를 방지할 수 있다.
      • 대량의 데이터 변경 시 binary log의 크기가 커질 수 있다.
      • MysQL 5.7.7 버전부터 기본 값이다.
    • STATEMENT 
      • 실행된 SQL 문 자체를 binary log에 기록한다.
      • DB Replication 시에 SQL 문이 replica에서 그대로 실행된다.
      • 로그 크기가 작고, 단순한 쿼리일 때 효율적이다.
      • 비결정적(Nondeterministic) 쿼리나 환경에 따라 달라질 수 있는 쿼리의 경우, replication 시 데이터 불일치가 발생할 수 있다.
        • Nondeterministic SQL: 동일한 입력 매개변수를 사용하더라도 여러 번 실행하면 다른 결과를 생성할 수 있는 SQL 문이다. 이는 주로 데이터베이스 외부 요인에 의존하거나 시간이 지남에 따라 변경되는 함수가 존재하기 때문이다. Nondeterministic SQL은 replication 시에 데이터 불일치 문제가 발생하며 쿼리 성능에 영향을 줄 수 있다.
    • MIXED
      • 기본적으로 STATEMENT 방식을 사용하지만, 특정 경우(ex. 비결정적 쿼리)에는 ROW 방식으로 변환하여 binary log에 기록한다.
      • STATEMENT와 ROW 방식의 장점을 결합하여 일반적인 쿼리는 효율적으로 기록하고, replication에 문제가 될 수 있는 쿼리는 안전하게 기록한다.

     

    문제 정의

    • 목표: RDS 클러스터 파라미터 그룹의 binlog_format 값을 ROW -> OFF로 변경한다.
    • 수행: RDS 클러스터 파라미터 그룹 수정 후 Reader, Writer 인스턴스 재부팅
      • pending-reboot -> in-sync
    • 문제: MySQL 세션에 접속하여 binlog_format 값을 조회하면 여전히 ROW로 출력된다.

     

    표준 MySQL은 binlog_format 값으로 OFF를 지원하지 않는다.

    참고: 7.4.4.1 바이너리 로깅 형식

     

    • MySQL에서 지원하는 binlog_format 값
      • STATEMENT (MySQL 5.7.7 이전까지 default)
      • ROW (MySQL 5.7.7 이후로 default)
      • MIXED

     

    MySQL 공식 문서에 따르면 SHOW VARIABLES LIKE 'binlog_format' 결과로 OFF를 반환하지 않는다. 즉, 파라미터 그룹의 설정 값으로 OFF가 존재하나, 서버 변수 값으로는 OFF를 반영할 수 없다.

     

    AWS 공식문서에 따르면 클러스터 파라미터 그룹의 binlog_format=OFF로 설정하면 log_bin 값이 OFF가 되고, MySQL에서 binlog_format 값은 DB의 기본 값인 ROW가 된다고 한다.

    When binary logging is disabled in Aurora MySQL (binlog_format = OFF), you can’t use features like AWS Database Migration Service (DMS) that depend on binary logs. However, SHOW VARIABLES LIKE 'binlog_format' will still return ROW.

     

    Aurora MySQL에서는 클러스터 파라미터 그룹에서 binlog_format을 OFF로 설정할 수 있지만, 이는 binary logging 자체를 비활성화하는 동작이다. 
    반면에 MysQL에서는 binlog_format에 OFF 옵션이 존재하지 않고, binary logging을 사용하지 않기 위해서는 log_bin을 OFF로 설정해야 한다.

    SHOW VARIABLES LIKE 'binlog_format'; -- ROW 출력
    SHOW VARIABLES LIKE 'log_bin';       -- OFF 출력

     

    권장 사항에 따르면
    Aurora MySQL: binlog_format=ROW 권장 (replication 불일치 방지)
    표준 MySQL: MySQL 5.7.7 버전부터 binlog_format=ROW가 default 값이 되었다. 그리고 MySQL 8.0.34 버전부터 binlog_format 변수가 deprecated가 되었다.

     

    log_bin과 binlog_format의 차이점

    • log_bin
      • 의미: binary log 기능 활성화 여부
      • 타입: Boolean (ON, OFF)
      • 역할: binary log 자체 활성화 여부
        • Aurora MySQL에서 binlog_format=OFF 설정 시 MySQL의 log_bin 값이 OFF로 설정된다.
    • binlog_format
      • 의미: 활성화된 binary log를 어떤 형식으로 기록할지 여부
      • 타입: ENUM (STATEMENT, ROW, MIXED)
      • 역할: 로그 기록 방식 선택
      • 비고: MySQL 8.0.34 기준으로 deprecated 되었다.

    참고문서

     

     

     

Designed by Tistory.