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를 복원에 활용할 수 있다.
실습 시나리오 요약
- mysqldump로 Full 백업
- 이후의 변경 이력은 Binary Log에 기록됨
- mysqlbinlog로 특정 시점까지의 쿼리 추출
- 추출된 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시간 동안의 변경만 복원 가능하다.
⚠️ 실무 주의사항
- 바이너리 로그 파일 위치는 용량 관리 필수
자동 삭제 설정(expire_logs_days) 없으면 디스크 폭발 가능 - 로그 포맷은 반드시 ROW 권장
STATEMENT 포맷은 재현 실패 가능성 있음 - 시간 설정 주의
mysqlbinlog에서 --start/--stop 옵션은 서버 시간이 기준이다. SELECT NOW();로 현재 시간 확인 필요 - 보안 이슈 주의
바이너리 로그는 민감한 데이터도 기록될 수 있으므로 권한 설정 필수
🧠 실무 구성 예시
매일 새벽 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
'DB' 카테고리의 다른 글
| [MySQL] (환경설정1️⃣) my.cnf 구조와 설정 항목 총정리 (0) | 2025.07.14 |
|---|---|
| [MySQL] (백업/복구6️⃣) 백업 복구 실수 방지 체크리스트와 실무 팁 💡 (4) | 2025.07.12 |
| [MySQL] (백업/복구5️⃣) 백업 자동화 스크립트 실무 적용 예제 🤖 (2) | 2025.07.12 |
| [MySQL] (백업/복구4️⃣) PITR(Point In Time Recovery) 원리와 설정 실습 (2) | 2025.07.12 |
| [MySQL] (백업/복구2️⃣) mysqldump 백업과 복원 방법 완벽 가이드 (0) | 2025.07.12 |
| [MySQL] (백업/복구1️⃣) 백업의 모든 것: 개념, 필요성, 전략 총정리 (0) | 2025.07.12 |
| [MySQL] (권한관리7️⃣) 사용자 관리 실수 방지 체크리스트 (0) | 2025.07.11 |
| [MySQL] (권한관리6️⃣) 사용자 권한 확인 및 변경, 삭제 실무 명령어 정리 (2) | 2025.07.11 |