MySQL 백업 전략에서 가장 강력한 복구 기능 중 하나가 PITR(Point-In-Time Recovery)다.
PITR은 이름 그대로 특정 시점까지 데이터베이스 상태를 되돌리는 복구 기법이다.
데이터를 완전히 날렸을 때 단순 전체 복원만으로는 복구할 수 없는 상황을 대비해, PITR은 실무에서 매우 중요하게 활용된다.

✅ PITR이란 무엇인가?
PITR(Point-In-Time Recovery)는 풀백업(mysqldump 등) 이후, 특정 시점까지의 변경 이력을 반영하여 데이터 상태를 복구하는 방법이다.
Binary Log에 기록된 DML(INSERT, UPDATE, DELETE) 쿼리를 활용해 정해진 시간 이전의 데이터 상태로 되돌릴 수 있다.
예를 들어, 실수로 DELETE FROM user를 실행한 경우,
삭제 직전 시간까지 복원하면 데이터 유실을 방지할 수 있다.
🧱 PITR을 위한 준비 요소
PITR을 수행하기 위해서는 다음 세 가지가 반드시 필요하다.
- 풀백업 파일 (mysqldump 등으로 생성)
- Binary Log 활성화 및 이력 보관
- 복구 대상 시점 (시간)
이 세 가지가 모두 준비되어야만 시점 복구가 가능하다.
🔧 Binary Log 활성화 및 설정 확인
먼저 my.cnf 또는 my.ini에서 Binary Log 설정이 되어 있어야 한다.
[mysqld]
server-id = 1
log-bin = /var/lib/mysql/mysql-bin
binlog_format = ROW
expire_logs_days = 7
활성화 여부 확인
SHOW VARIABLES LIKE 'log_bin';
현재 기록 중인 로그 파일 확인
SHOW MASTER STATUS;
📤 mysqldump로 Full Backup 생성
PITR은 Full Backup → Binary Log 적용의 순서로 복원하기 때문에 백업이 먼저 수행되어야 한다.
mysqldump -u root -p --single-transaction --routines --events mydb > mydb_full.sql
파일명에 백업 시간을 붙여두면 나중에 편하다.
mydb_full_20250703_1200.sql
🔍 Binary Log 내 시간 추적
로그 분석 도구: mysqlbinlog
예를 들어 특정 시점의 Binary Log를 살펴보려면 다음처럼 실행한다.
mysqlbinlog --start-datetime="2025-07-03 12:00:00" --stop-datetime="2025-07-03 14:00:00" /var/lib/mysql/mysql-bin.000012 > pitr_diff.sql
옵션 설명
- --start-datetime: 변경 추적을 시작할 시간
- --stop-datetime: 변경 반영을 멈출 시간
- mysql-bin.000012: 해당 시간 구간을 포함하는 로그 파일
추출된 SQL은 수정 없이 그대로 적용 가능하다.
🔁 복구 실행 순서 정리
1. mysqldump 백업 파일로 DB 초기화
mysql -u root -p < mydb_full_20250703_1200.sql
2. Binary Log로 변경 이력 반영
mysql -u root -p < pitr_diff.sql
3. 복구 완료 후, 검증
- 레코드 수 확인
- 삭제된 데이터 존재 여부 확인
- 이중 반영이 없는지 트랜잭션 확인
⚠️ 실무 PITR에서 자주 발생하는 문제와 대처법
- Binary Log가 삭제되었거나 남아있지 않음
→ expire_logs_days 값을 길게 설정하거나 별도로 복사 보관 필요 - 서버 시간과 실제 기준 시간 차이
→ SELECT NOW();로 정확한 시간 기준 확인 필요 - 복구 대상 로그 파일 추정 실패
→ SHOW BINARY LOGS;로 로그 목록 확인 후 필요한 파일만 추출 - GTID 충돌
→ mysqlbinlog 실행 시 --set-gtid-purged=OFF 옵션 추가로 회피 가능
🧪 실습 예제 요약
- 2025-07-03 12시 00분에 mysqldump로 백업
- 13시 43분에 실수로 user 테이블 전부 삭제
- 12:00~13:43까지의 Binary Log 추출
- 복원 시, 백업 파일 적용 후, 추출한 binlog SQL만 실행
- user 테이블 삭제 이전 상태로 완전 복구 성공
🔐 복구도 전략이다
많은 기업들이 "백업은 잘 하고 있다"고 말하지만, 정작 복구 실습을 제대로 해본 적 없는 경우가 많다.
PITR은 백업 전략 중에서도 실제 장애 상황에서 가장 유연하고 실용적인 복구 전략이다.
반드시 백업 + 로그 이력을 함께 운영하고, 복구 실습을 통해 숙련도를 쌓아야 한다.
✅ 정리
- PITR은 정확한 시점으로 데이터베이스를 되돌릴 수 있는 복구 전략이다.
- Full Backup과 Binary Log가 함께 있어야 한다.
- mysqlbinlog 도구를 사용해 원하는 시간 구간의 변경 사항만 추출 가능하다.
- 복원 순서는 백업 → 로그 SQL 반영이다.
- 실무에서는 반드시 자동화, 로그 보존 정책, 테스트 복구 환경이 병행되어야 한다.
🔗 공식 문서 참고
MySQL 8.0 Reference Manual - Point-in-Time Recovery
'DB' 카테고리의 다른 글
| [MySQL] (환경설정2️⃣) InnoDB Buffer Pool 최적화 전략 (2) | 2025.07.14 |
|---|---|
| [MySQL] (환경설정1️⃣) my.cnf 구조와 설정 항목 총정리 (0) | 2025.07.14 |
| [MySQL] (백업/복구6️⃣) 백업 복구 실수 방지 체크리스트와 실무 팁 💡 (4) | 2025.07.12 |
| [MySQL] (백업/복구5️⃣) 백업 자동화 스크립트 실무 적용 예제 🤖 (2) | 2025.07.12 |
| [MySQL] (백업/복구3️⃣) Binary Log 기반 백업 전략과 설정법 (2) | 2025.07.12 |
| [MySQL] (백업/복구2️⃣) mysqldump 백업과 복원 방법 완벽 가이드 (0) | 2025.07.12 |
| [MySQL] (백업/복구1️⃣) 백업의 모든 것: 개념, 필요성, 전략 총정리 (0) | 2025.07.12 |
| [MySQL] (권한관리7️⃣) 사용자 관리 실수 방지 체크리스트 (0) | 2025.07.11 |