[MySQL] DB 관리를 위한 바이너리 로그(binlog) 이해하기

선상원·2024년 10월 20일
0

mysql

목록 보기
5/12

작성일: 2023-02-10 (금)


오늘의 주제는 “MySQL 바이너리 로그” 입니다.

MySQL에서 빈로그 혹은 바이너리 로그라고 불리는 로그 파일은 DDL & DML 명령문을 통해서 데이터의 변화가 발생할 경우 해당 이벤트를 기록하는 로그 파일입니다.
바이너리 로그 파일은 기본적으로 Transaction Commit 시점에 기록되며, 데이터 변경 순서를 보장해줍니다.

주로 복제(Replication) & 복구(Recovery) 를 목적으로 사용되며
데이터 복제 시에는 Master 서버에서 바이너리 로그 파일을 Slave 서버로 전달하고,
Slave 서버에서는 전달받은 바이너리 로그 파일을 읽어 Master 서버와 데이터를 동기화를 진행합니다.


오늘은 MySQL에서 사용하는 바이너리 로그에는 다양한 로그 작성 방식을 알아보려 합니다.

MySQL Binary log 종류

  1. Statement-based logging
    - 데이터 변경 작업을 수행하는 SQL(INSERT, UPDATE, DELETE) 문을 바이너리 로그에 저장
    - 백업 & 복구 작업에 대해서 빠른 속도로 수행 가능
  2. Row-based logging
    • SQL(INSERT, UPDATE, DELETE) 문에 의해 개별 테이블 행이 어떻게 영향을 받는지를 로그에 저장
    • 각 행의 변경 사항을 기록하기에 로그 파일의 크기가 매우 빠르게 증가하고, 복제 지연 시간 증가될 수 있음
    • 임시 테이블의 경우 해당 로깅 방식에서는 복제하지 않기 때문에 SBR 방식 사용
  3. Mix of both statement-based and row-based logging
    • MySQL 5.1 이상 지원
    • 기본적으로 Statement based logging 방식을 통해 기록하며,
      스토리지 엔진 및 특정 명령문에 따라 자동으로 Row based logging 방식으로 기록

💡 MySQL에서 바이너리 로그 파일을 기록하는 방식은 위에세 소개한 3가지 방식이 있습니다.
Row-based logging 방식이 MySQL 의 표준으로 제공되고 있지만,
각각의 방식에 장단점이 존재하기 때문에 자신의 상황에 맞는 기록 방식을 사용하는 것이 가장 바람직하다고 볼 수 있을 것 같습니다.

profile
쉼 없는 고민과 학습을 통해 가장 효율적인 데이터베이스 관리 방안을 찾고자 노력하는 DBA 입니다.

0개의 댓글