반응형
많은 개발자와 운영자가 “우린 매일 백업하고 있어요”라고 말하지만, 복구 테스트를 주기적으로 실행하는 곳은 드물다.
하지만 실무에서 중요한 건 복원 가능성이다.
“백업은 성공했는데, 복구는 실패했다”는 말이 나오지 않도록 실수를 예방하고 점검하는 전략을 정리한다.

✅ 가장 흔한 복구 실수 10가지
- 백업 파일이 없거나 최신 상태가 아님
- 백업 스크립트는 존재하지만 실제 실행되지 않거나 cron 등록이 빠져 있음
- 백업 파일이 손상되었거나 복원 불가
- 용량만 확인하고, 실제 mysql < backup.sql로 테스트하지 않음
- Binary Log가 비활성화되어 PITR이 불가능
- log-bin 설정 누락으로 시점 복원이 불가
- 백업 파일에 트리거, 프로시저, 이벤트 누락
- --routines, --events, --triggers 옵션 미사용
- 다른 버전/설정의 DB에 복원하다 실패
- MySQL 5.x 백업을 8.x에 복원하거나, charset 충돌 발생
- 복원 순서 오류
- mysqldump → binary log 순서를 반대로 하거나, 중복 실행
- DB 미리 생성하지 않고 복원
- mysql -u root -p < dump.sql 실행 시 “Unknown database” 오류 발생
- 인코딩 깨짐
- --default-character-set=utf8mb4 옵션 누락
- 디스크 용량 부족으로 복구 도중 중단
- 백업 압축 해제 시 디스크 부족 문제
- 실제 운영 DB에 실수로 복원
- 테스트 환경이 아닌 운영 서버에 복원 SQL 실행
반응형
🧾 실무 체크리스트
| 항목 | 점검 내용 |
| ✅ 백업 자동화 스크립트 | cron 등록 여부, 로그 확인 |
| ✅ 백업 옵션 구성 | --routines, --events, --single-transaction 포함 여부 |
| ✅ 백업 파일 유효성 | 실제 복원 테스트 여부 |
| ✅ 로그 보관 정책 | Binary Log 보존 기간 설정 확인 |
| ✅ 복원 시나리오 테스트 | 정기적으로 복원 절차 실습 여부 |
| ✅ 파일 위치와 이름 체계 | 날짜, DB명 포함, 폴더 구조 일관성 |
| ✅ 복원 순서 문서화 | 백업 → 로그 → 적용 순서 매뉴얼 작성 |
| ✅ 운영/테스트 분리 | 실수 방지를 위한 별도 복원 환경 확보 |
| ✅ 디스크 용량 모니터링 | /var, 백업 디렉토리 여유 공간 체크 |
| ✅ S3 또는 NAS 이중화 | 백업파일 다중 보관 여부 |
🧪 주기적인 복구 테스트 방법
- 매주 1회, 개발/스테이징 서버에 랜덤 백업본을 복원해본다
- 복원된 DB에서 쿼리, 트랜잭션, 인코딩 검증까지 확인
- 실패 시 문제 원인을 기록하여 재발 방지 문서화
예:
mysql -u root -p < backup/mydb_20250701.sql
복원 시 예상 쿼리 실행 확인
SELECT COUNT(*) FROM users;
SELECT * FROM logs ORDER BY created_at DESC LIMIT 10;
반응형
🧠 실무 조직에서 자주 놓치는 부분
- 담당자 교체 시 백업 구조 인수인계 미비
- 장애 발생 시 백업 위치 모름
- 복원 스크립트 버전 관리 안됨
- S3 정책 변경으로 백업 업로드 실패 방치
- 다중 백업 로테이션 불일치 (A 서버는 되고 B 서버는 안 됨)
정기적인 점검과 문서화는 백업 복구의 생명줄이다.
💡 실전 팁 모음
- 백업 성공 시 Slack이나 메일로 알림 전송
- 로그 파일 자동 압축 및 회전(logrotate)
- 압축된 백업 파일의 SHA256 체크섬 저장
- 복원 테스트 자동화(CI 스크립트로 검증 포함)
- 중요한 테이블은 별도로 --no-data + SELECT INTO OUTFILE 백업도 병행
✅ 정리
- 백업보다 중요한 건 복원 가능성이다
- 실무에서 가장 흔한 실수 10가지를 점검하고, 정기 테스트로 미리 대비해야 한다
- 체크리스트는 주기적으로 점검하며 실수 없는 복구 환경을 유지해야 한다
- 복원 테스트는 반드시 운영 서버와 분리된 환경에서 반복 실습해야 한다
- 문서화, 자동화, 알림, 이중화는 실무에서 필수다
🔗 공식 문서 참고
MySQL 8.0 Reference Manual - Backup and Recovery
반응형
'DB' 카테고리의 다른 글
| [MySQL] (환경설정4️⃣) query_cache는 아직 유효한가? 설정 전략 분석 (0) | 2025.07.15 |
|---|---|
| [MySQL] (환경설정3️⃣) 정렬 성능 향상: sort_buffer_size 설정법 (1) | 2025.07.14 |
| [MySQL] (환경설정2️⃣) InnoDB Buffer Pool 최적화 전략 (2) | 2025.07.14 |
| [MySQL] (환경설정1️⃣) my.cnf 구조와 설정 항목 총정리 (0) | 2025.07.14 |
| [MySQL] (백업/복구5️⃣) 백업 자동화 스크립트 실무 적용 예제 🤖 (2) | 2025.07.12 |
| [MySQL] (백업/복구4️⃣) PITR(Point In Time Recovery) 원리와 설정 실습 (2) | 2025.07.12 |
| [MySQL] (백업/복구3️⃣) Binary Log 기반 백업 전략과 설정법 (2) | 2025.07.12 |
| [MySQL] (백업/복구2️⃣) mysqldump 백업과 복원 방법 완벽 가이드 (0) | 2025.07.12 |