본문 바로가기
DataBase/Data & SQL

[MySQL] 바이너리 로그(binlog)란?

by 스파이디웹 2023. 1. 19.
728x90

1. binlog란?

빈로그 혹은 바이너리 로그는 MySQL 서버 인스턴스의 데이터 변경사항들에 대한 정보를 포함하는 로그 파일의 세트

windows mysql 8.0 binlog 파일

  • 에러코드, 바이너리 로그 자체에 대한 메타데이터 등 다양한 데이터가 같이 포함되게 됨
  • 기본적으로 Transaction Commit 시에 기록되어지며, 데이터 변경 순서를 보장
  • 주로 복제(Replication) 및 복구(Recovery)를 목적으로 binary log가 사용 됨
    • 복제: Secondary Node 가 Primary Node 로부터 binlog 데이터를 전달받아서 로깅 함(릴레이 로그)
      부하분산 기능을 제공, 바이너리 로그는 마스터라는 서버에서 생성되고 슬레이브란 서버는 마스터 서버에 접속하여  마스터의 바이너리 로그를 읽어와서 똑같이  이벤트를 실행시켜 마스터서버와 슬레이브 서버를 동일하게 만들음
    • 복구: 데이터베이스를 사용하다보면 데이터 삭제나 데이터베이스가 어떤 이유로 장애나 크래쉬가 발생할  복구를 해야할 때가 있습니다. 이때 특정 시점으로 돌아가야 하는데 이때 특정 시점 시간으로 돌아갈 

2. binlog 방식

1) Statement-based logging

  • Insert, Update, Delete 에 대한 SQL 문들이 포함
  • Statement base 로 복제를 수행, Statement-Based Replication (SBR)
  • 로그 파일에 적은 데이터가 기록되며, 로그 파일에 필요한 저장 공간이 줄어드는 장점
  • 백업에 대한 복구는 Replay 처럼 수행되며 빠르게 복원이 수행
  • 로그 기반으로 복원 시 제약 →  RAND(), LOAD_FILE, UUID() 등과 같이 Deterministic 하지 않은 동작에 대해서는 정확히 복제가 안됨

2) Row-based logging

  • 각 행에 대한 변화를 기록
  • Row-based logging 을 이용해서 Primary → Secondary 로 복제를 수행할 있음, Row-Based Replication(RBR)
  • RBL 의 경우 각 행의 변경 사항을 이진 로그에 기록하므로 로그 파일의 크기가 매우 빠르게 증가할 수 있으며 지연이 발생할 수 있음
  • 임시 테이블의 경우 RBL 기반으로 복제되지 않으므로 임시 테이블 관련 구문은 Statement base 로 기록되어야 함

3) 혼합형

  • MySQL 5.1 이상부터 Row-based logging 과 함께 혼합형태가 지원
  • 기본적으로는 Statement based logging 을 사용하지만, 스토리지 엔진 및 특정 명령문에 따라 로그가 자동으로 Row based logging 으로 기록 됨
  • mysqlbinlog 유틸리티를 사용하면 바이너리 로그에 대한 내용을 쉽게 조회 가능

3. binlog vs transaction log

  binlog transaction log(redo log)
용도 데이터베이스에 기록 및 업데이트한 이력(history)을 로깅, 상태 복원에 대한 핵심적으로 사용될 수 있는 증분백업을 지원 트랜잭션에 대한 처리,롤백,Crash Recovery, Point in Time Recovery 등을 위한 용도로 사용
사용 엔진 MyISAM 스토리지 엔진 InnoDB 스토리지 엔진

 

728x90

댓글