Skip to content

English {#english}

Purpose: Daily full dump from DB server and upload to R2 for offsite retention. Prerequisites: R2 bucket prego-db-backups, R2 API token, rclone on DB server. Configure rclone remote for R2, then run dump + rclone copy (or use cron). Ref: cloudflare-orchestration-and-gtape-backup-plan §3.2, §3.3.

flowchart LR
  A[mysqldump] --> B[gzip]
  B --> C[rclone copy to R2]

Full details: see Korean section below.


한국어 {#korean}

Runbook: MariaDB 백업 → Cloudflare R2 (GTape §3.2, §3.3)

목적: DB 서버에서 일별 전체 덤프를 생성하고 R2로 전송하여 오프사이트 보존.

Ref: cloudflare-orchestration-and-gtape-backup-plan §3.2, §3.3.


1. 사전 조건

항목내용
R2 버킷Pulumi로 prego-db-backups 버킷 생성 (pulumi stack output r2_db_backups_bucket_name).
R2 API 토큰Cloudflare Dashboard → R2 → Manage R2 API Tokens → Object Read & Write. Access Key ID, Secret Access Key 확보.
rcloneDB 서버에 rclone 설치. apt install rclone 또는 rclone.org에서 설치.

2. rclone R2 원격 설정 (DB 서버에서 1회)

Terminal window
rclone config
# n) New remote → name: r2
# Storage: s3
# provider: Cloudflare
# env_auth: false
# access_key_id: <R2 Access Key ID>
# secret_access_key: <R2 Secret Key>
# endpoint: https://<ACCOUNT_ID>.r2.cloudflarestorage.com
# (region 등은 기본값)
  • endpoint: Cloudflare 계정 ID를 사용. 예: https://YOUR_ACCOUNT_ID.r2.cloudflarestorage.com

3. 백업 스크립트 배치

Prego 레포의 scripts/backup/mariadb-backup-to-r2.sh를 DB 서버에 복사하고 실행 권한 부여.

Terminal window
chmod +x /path/to/mariadb-backup-to-r2.sh

환경변수(또는 스크립트 상단 수정):

  • MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD — MariaDB 접속. 또는 ~/.my.cnf 사용.
  • R2_REMOTE — rclone 원격 이름 (기본 r2).
  • R2_BUCKET — 버킷 이름 (기본 prego-db-backups).
  • BACKUP_DIR — 로컬 덤프 임시 경로 (기본 /var/backups/mariadb).

4. Cron 등록 (일별 실행)

Terminal window
# 매일 00:10에 실행
echo '10 0 * * * root MYSQL_PASSWORD=xxx /path/to/mariadb-backup-to-r2.sh >> /var/log/mariadb-backup.log 2>&1' | sudo tee /etc/cron.d/prego-mariadb-backup
  • MYSQL_PASSWORD는 시크릿이므로 cron 파일 권한 0600 권장 또는 환경파일에서 source.

5. 검증

  • 수동 실행: MYSQL_PASSWORD=... ./mariadb-backup-to-r2.sh
  • R2 버킷에서 daily/mysqldump_YYYYMMDD_HHMM.sql.gz 객체 확인.
  • Binlog는 Ansible mariadb_server role에서 이미 활성화됨 (PITR용).

6. DiRT (복구 검증)

월 1회 복구 테스트는 dirt-restore-verify 참조.

Help