- MySQL 백업 도구 비교 방식 장점 단점 mysqldump 간단, 표준, Docker 친화적 대용량 DB에서 느림 mysqlpump 병렬 처리 지원 MySQL 5.7+ 필요 xtrabackup 핫 백업, 증분 지원 설정 복잡 추천: mysqldump (Docker 환경에 적합, DB 크기가 적당함)
- 파일 증분 백업 도구 비교 도구 중복제거 암호화 멀티스레드 Google Drive rsync 하드링크만 X X rclone 필요 restic 블록 레벨 AES-256 O 네이티브 지원 borg 블록 레벨 (더 효율적) O X rclone 필요 rclone X O O 네이티브 추천: restic
- 블록 레벨 중복제거로 저장 공간 절약
- rclone 백엔드로 Google Drive 직접 연동
- 멀티스레드로 빠른 백업
- 암호화 기본 지원
- Google Drive 연동 rclone 사용 (표준 방식)
- Service Account 또는 OAuth2 인증
- rclone copy vs rclone sync 주의
- 전송 실패 시 자동 재시도
- 권장 백업 전략 ┌─────────────────────────────────────────────────────────┐
│ OCI ARM64 서버 │
├─────────────────────────────────────────────────────────┤
│ [Cron Daily 02:00] │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ MySQL Dump │───▶│ /backup/mysql │ │
│ │ (all DBs) │ │ 7일 보관 │ │
│ └─────────────────┘ └────────┬────────┘ │
│ │ │
│ [Cron Daily 03:00] │ │
│ ┌─────────────────┐ ┌───────▼────────┐ │
│ │ restic backup │───▶│ /backup/files │ │
│ │ (4 sites) │ │ 증분 백업 │ │
│ └─────────────────┘ └────────┬────────┘ │
│ │ │
│ [Cron Daily 04:00] │ │
│ ┌─────────────────┐ ┌───────▼────────┐ │
│ │ rclone sync │───▶│ Google Drive │ │
│ │ │ │ 30일 보관 │ │
│ └─────────────────┘ └────────────────┘ │
└─────────────────────────────────────────────────────────┘ - 보관 정책 권장 유형 로컬 보관 Google Drive MySQL dump 7일 30일 파일 증분 7일 (snapshot) 30일
Sources:
- https://rclone.org/drive/
- https://medium.com/swlh/using-rclone-on-linux-to-automate-backups-to-google-drive-d599b49c42e8
- https://simplebackups.com/blog/the-ultimate-mysql-database-backup-script/
- https://bebehei.de/simple-comparison-borg-restic-rustic-2024/
- https://faisalrafique.com/restic-vs-borg/
OCI ARM64 서버 백업 시스템 구축기
들어가며
OCI (Oracle Cloud Infrastructure) ARM64 서버에서 운영 중인 여러 웹사이트의 백업 시스템을 구축했습니다. 키 파일 없이 안전하게, 그리고 자동으로 클라우드에 백업하는 방법을 공유합니다.
요구사항
- MySQL 데이터베이스 일일 덤프
- 여러 사이트 파일 증분 백업
- 클라우드 스토리지 이중화 (OCI + Google Drive)
- 키 파일 없이 안전한 인증
사용 도구
| 도구 | 용도 |
|---|---|
| mysqldump | MySQL 데이터베이스 백업 |
| restic | 암호화된 증분 백업 |
| OCI CLI | OCI Object Storage 업로드 |
| rclone | Google Drive 동기화 |
아키텍처
[OCI ARM64 Server]
│
├─ MySQL Dump (매일 02:00)
│ └─ /home/opc/backup/mysql/*.sql.gz
│
├─ Restic 증분백업 (매일 03:00)
│ └─ /home/opc/backup/restic-repo/
│
├─ OCI Object Storage (매일 04:00)
│ └─ oci os object sync (Instance Principal)
│
└─ Google Drive (매일 04:30)
└─ rclone sync (OAuth2)
핵심 포인트: 키 없는 인증
OCI Object Storage – Instance Principal
OCI에서는 Instance Principal을 사용하면 API 키 없이 인증할 수 있습니다.
설정 방법:
- Dynamic Group 생성 (인스턴스 OCID 기반)
- Policy 생성 (Object Storage 권한 부여)
- 스크립트에서
OCI_CLI_AUTH=instance_principal설정
export OCI_CLI_AUTH=instance_principal
oci os object sync --bucket-name oci-backup --src-dir /home/opc/backup/mysql
Google Drive – OAuth2
rclone의 OAuth2 인증을 사용하면 JSON 키 파일 없이 안전하게 연동할 수 있습니다.
# 로컬 PC에서 인증
rclone authorize "drive"
# 서버에 토큰 설정
rclone config
Restic 증분 백업
restic은 block-level deduplication을 지원해서 변경된 부분만 백업합니다.
# 초기화
restic init --repo /home/opc/backup/restic-repo
# 백업 실행
restic backup /home/site1/www /home/site2/www \
--exclude="*.log" \
--exclude="*/cache/*" \
--exclude="*/node_modules/*"
# 보관 정책 적용
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 3 --prune
Cron 설정
# 매일 새벽 2시 전체 백업 실행
0 2 * * * /home/opc/backup/scripts/backup-all.sh >> /home/opc/backup/logs/daily-backup.log 2>&1
백업 흐름
- 02:00 – MySQL 덤프 (6개 DB, gzip 압축)
- 02:05 – Restic 증분 백업 (4개 사이트)
- 02:30 – OCI Object Storage 동기화
- 02:35 – Google Drive 동기화
복구 방법
MySQL 복구
gunzip -c backup_20251218.sql.gz | mysql -u root -p database_name
Restic 복구
# 스냅샷 목록 확인
restic snapshots
# 특정 파일 복구
restic restore latest --target /tmp/restore --include "/home/site1/www"
결과
- 로컬: 7일치 MySQL 덤프 + restic 스냅샷
- OCI Object Storage: 30일 보관, ~6GB
- Google Drive: 7일 보관, MySQL 덤프만
마치며
Instance Principal과 OAuth2를 활용하면 키 파일 관리 부담 없이 안전한 백업 시스템을 구축할 수 있습니다. 특히 OCI 환경에서는 Instance Principal이 가장 권장되는 인증 방식입니다.