DB

[MySQL] (백업/복구3️⃣) Binary Log 기반 백업 전략과 설정법

인생아 2025. 7. 12. 10:34
반응형

MySQL에서 데이터를 안전하게 보호하려면 단순히 mysqldump만으로는 부족하다.
왜냐하면 mysqldump는 백업 시점의 스냅샷만 저장하고, 그 이후 변경된 데이터는 포함되지 않기 때문이다.
이를 보완하기 위한 핵심 기능이 바로 Binary Log(바이너리 로그)다.
Binary Log는 데이터 변경 이력을 기록하는 로그 시스템으로, 백업 및 복구 전략에서 핵심적인 역할을 한다.

✅ Binary Log란?

Binary Log는 MySQL 서버가 수행한 INSERT, UPDATE, DELETE 등의 DML 쿼리를 이진(binary) 형식으로 기록하는 로그 파일이다.
주요 목적은 다음과 같다.

  • Point-in-Time Recovery (PITR)
    특정 시점까지 변경 이력을 반영하여 복구할 수 있음
  • Replication(복제)
    마스터-슬레이브 구조에서 변경 내용을 전파하는 데 사용됨
  • 데이터 감사 및 추적
    누가 언제 무엇을 변경했는지 분석 가능
반응형

🛠️ Binary Log 설정 방법 (my.cnf)

Binary Log를 사용하려면 MySQL 설정 파일(my.cnf 또는 my.ini)에 다음 항목을 추가한다.

[mysqld]
server-id = 1
log-bin = /var/lib/mysql/mysql-bin
binlog_format = ROW
expire_logs_days = 7
max_binlog_size = 100M

설정 항목 설명

  • server-id: 복제를 위해 고유한 서버 ID 설정
  • log-bin: Binary Log 활성화 및 경로 지정
  • binlog_format: 기록 방식 (ROW, STATEMENT, MIXED 권장: ROW)
  • expire_logs_days: 일정 일수 후 자동 삭제
  • max_binlog_size: 바이너리 로그 하나의 최대 크기

설정 적용 후에는 MySQL 서버를 재시작해야 한다.

sudo systemctl restart mysqld

🔍 Binary Log 확인 방법

현재 활성화된 바이너리 로그 파일 확인

SHOW BINARY LOGS;

현재 사용 중인 로그 파일 확인

SHOW MASTER STATUS;

Binary Log 활성화 여부 확인

SHOW VARIABLES LIKE 'log_bin';

📦 Binary Log 백업 방법

단순 복사

cp /var/lib/mysql/mysql-bin.* /backup/location/

또는 mysqlbinlog 명령어로 덤프 형태로 추출 가능

mysqlbinlog mysql-bin.000012 > binlog_000012.sql

백업 자동화를 원한다면, cron을 이용해 파일을 주기적으로 복사하거나 추출하도록 구성한다.

반응형

🕒 Point-in-Time Recovery (PITR) 준비

Binary Log는 mysqldump와 조합하여 특정 시점까지 복원할 때 매우 유용하다.
예를 들어 백업 이후 2시간 뒤에 DELETE를 잘못 수행했을 경우, 해당 시점까지의 binary log를 복원에 활용할 수 있다.

실습 시나리오 요약

  1. mysqldump로 Full 백업
  2. 이후의 변경 이력은 Binary Log에 기록됨
  3. mysqlbinlog로 특정 시점까지의 쿼리 추출
  4. 추출된 SQL을 다시 MySQL에 적용
mysqlbinlog --start-datetime="2025-07-03 12:00:00" --stop-datetime="2025-07-03 14:00:00" mysql-bin.000012 > changes.sql
mysql -u root -p < changes.sql

이렇게 하면 Full 백업 이후 2시간 동안의 변경만 복원 가능하다.

⚠️ 실무 주의사항

  1. 바이너리 로그 파일 위치는 용량 관리 필수
    자동 삭제 설정(expire_logs_days) 없으면 디스크 폭발 가능
  2. 로그 포맷은 반드시 ROW 권장
    STATEMENT 포맷은 재현 실패 가능성 있음
  3. 시간 설정 주의
    mysqlbinlog에서 --start/--stop 옵션은 서버 시간이 기준이다. SELECT NOW();로 현재 시간 확인 필요
  4. 보안 이슈 주의
    바이너리 로그는 민감한 데이터도 기록될 수 있으므로 권한 설정 필수

🧠 실무 구성 예시

매일 새벽 4시 mysqldump 전체 백업 수행
이후 변경 사항은 Binary Log에 기록
하루치 로그는 NAS에 별도 저장
expire_logs_days = 7로 설정하여 최근 7일 이내 로그 유지
복구 테스트는 매주 개발 서버에서 PITR 방식으로 진행

이런 구성은 데이터 유실 위험을 최소화하고 복구 유연성을 확보하는 실무 전략으로 강력히 추천된다.

✅ 정리

  • Binary Log는 MySQL에서 변경 이력을 추적하고, 시점 복구(PITR)를 가능하게 만드는 핵심 기능이다.
  • 설정 파일에서 log-bin, binlog_format, expire_logs_days를 적절히 구성해야 한다.
  • mysqldump와 Binary Log를 조합하면 강력한 백업/복구 체계를 구축할 수 있다.
  • mysqlbinlog를 통해 특정 시점만 골라 복원 가능하므로 장애 대응력이 높아진다.

🔗 공식 문서 참고
MySQL 8.0 Reference Manual - The Binary Log

반응형