← 전체 목록
서버백업운영

정기적인 백업 복원 테스트로 실제 장애 시 복구 가능성을 보장합니다

ℹ️ 본 글은 정보 제공 목적이며, 광고·제휴 링크가 포함될 수 있습니다.
목차 보기

백업 파일 복원 테스트로 백업 신뢰성 확인이 얼마나 중요한지 알게 된 건 DB가 깨진 후 백업 파일을 열었더니 gzip: /var/backups/mysql/backup.sql.gz: unexpected end of file이 나왔을 때입니다. 디스크 쓰기가 실패한 날 백업이 불완전하게 저장됐고, 이후 로그도 확인 안 하고 안심하고 있었습니다. 백업이 있어도 열리지 않으면 없는 것과 같습니다.

백업 파일 무결성 확인

# gzip 파일 무결성 테스트 (압축 풀지 않고 검증)
gzip -t /var/backups/mysql/backup_20260525.sql.gz
echo "Exit code: $?"  # 0이면 정상, 1이면 손상

# 모든 백업 파일 일괄 검증
for f in /var/backups/mysql/*.sql.gz; do
    gzip -t "$f" 2>/dev/null && echo "✅ OK: $f" || echo "❌ FAIL: $f"
done

# SQL 파일 헤더 확인 (압축 풀어서 첫 줄 확인)
zcat /var/backups/mysql/backup_20260525.sql.gz | head -5

실제 DB 복원 테스트

# 테스트 DB 생성
mysql -u root -p -e "CREATE DATABASE restore_test;"

# 백업을 테스트 DB에 복원
zcat /var/backups/mysql/backup_20260525.sql.gz | mysql -u root -p restore_test

# 복원 확인 (테이블 수 비교)
mysql -u root -p -e "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='restore_test';"
mysql -u root -p -e "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='원본DB';"

# 테스트 DB 삭제
mysql -u root -p -e "DROP DATABASE restore_test;"

자동 백업 검증 스크립트

#!/bin/bash
# /usr/local/bin/verify-backup.sh

BACKUP_DIR="/var/backups/mysql"
LATEST=$(ls -t "$BACKUP_DIR"/*.sql.gz 2>/dev/null | head -1)
ADMIN_EMAIL="admin@example.com"

if [ -z "$LATEST" ]; then
    echo "백업 파일 없음" | mail -s "[서버경고] 백업 파일 미발견" $ADMIN_EMAIL
    exit 1
fi

if ! gzip -t "$LATEST" 2>/dev/null; then
    echo "백업 파일 손상: $LATEST" | mail -s "[서버경고] 백업 파일 손상" $ADMIN_EMAIL
    exit 1
fi

echo "$(date): 백업 검증 OK - $LATEST" >> /var/log/backup-verify.log

백업 복원 테스트는 월 1회 이상 정기적으로 실시해야 합니다. 실제 장애 상황에서 처음 복원을 시도하면 예상치 못한 문제가 나타나기 쉽습니다.

편집 정책

의료기관 인프라 운영 현장 경험을 바탕으로 작성하며, WavePix 운영자 (의료기관 3곳 인프라 전담)가 최종 검수합니다.

작성·검수: WavePix 운영자 (의료기관 3곳 인프라 전담)