English {#english}
Purpose: Monthly restore from MariaDB backups stored in R2 and integrity verification. “Untested backup is no backup” (GTape).
Steps (summary): Download latest dump from R2 → restore into a temporary Docker MariaDB container → verify table row counts and optional checksums → tear down. Use scripts/backup/dirt-restore-verify.sh for one-shot automation. Prerequisites: rclone (or aws cli) for R2, Docker. Ref: cloudflare-orchestration-and-gtape-backup-plan §3.4.
flowchart LR A[R2 dump] --> B[Download] B --> C[Docker MariaDB] C --> D[Restore] D --> E[Verify] E --> F[Teardown]
한국어 {#korean}
Runbook: DiRT (Disaster Recovery Training) — 복구 검증
목적: R2에 보관된 MariaDB 백업으로 월 1회 복원 후 무결성 검증. “테스트되지 않은 백업은 백업이 아니다”(GTape).
Ref: cloudflare-orchestration-and-gtape-backup-plan §3.4.
1. 개요
| 항목 | 내용 |
|---|---|
| 주기 | 매월 1회(또는 분기 1회) 권장. |
| 절차 | R2에서 최신(또는 지정) 덤프 다운로드 → 별도 Docker MariaDB 컨테이너에 복원 → 테이블 건수·Checksum 등 무결성 검증. |
| 실행 환경 | 스테이징 서버 또는 전용 복구 검증용 호스트. 프로덕션 DB 서버에서 직접 복원하지 않음. |
2. 사전 조건
- rclone(또는 aws cli)으로 R2 접근 가능.
- Docker 설치됨.
scripts/backup/dirt-restore-verify.sh실행 권한.
3. 수동 실행 절차
3.1 R2에서 덤프 다운로드
rclone copy r2:prego-db-backups/daily/ ./dirt-work/ --include "mysqldump_*.sql.gz"# 또는 특정 파일: rclone copy r2:prego-db-backups/daily/mysqldump_20250101_0010.sql.gz ./dirt-work/3.2 임시 MariaDB 컨테이너 기동 및 복원
docker run -d --name dirt-mariadb -e MYSQL_ROOT_PASSWORD=verify mariadb:10.6# 복원: zcat dirt-work/mysqldump_*.sql.gz | docker exec -i dirt-mariadb mysql -uroot -pverify3.3 무결성 검증
- 테이블 건수:
SELECT table_name, table_rows FROM information_schema.tables WHERE table_schema NOT IN ('information_schema','performance_schema'); - Checksum(선택): 핵심 테이블에 대해
CHECKSUM TABLE db.table; - 소요 시간·결과를 로그 또는 Runbook에 기록.
3.4 정리
docker stop dirt-mariadbdocker rm dirt-mariadbrm -rf dirt-work4. 자동화 스크립트
scripts/backup/dirt-restore-verify.sh를 사용하면 위 단계를 한 번에 실행할 수 있음. 실패 시 exit 1로 알림 연동 가능.
5. 알림·기록
- 실패 시: 슬랙·이메일·Control Plane 알림 등으로 담당자에게 통보.
- 성공/실패·소요 시간·검증 요약을 Runbook 또는 모니터링 대시보드에 기록 권장.