일본 서버호스팅으로 서비스를 운영할 때 백업은 가장 중요하면서도 가장 쉽게 놓치는 부분입니다. 하드웨어 장애, 랜섬웨어, 실수로 인한 파일 삭제 등 예상치 못한 상황에서 백업이 없으면 데이터를 복구할 수 없습니다. 이 글에서는 일본 서버의 체계적인 백업 전략을 안내합니다.
백업의 3-2-1 원칙
전문적인 백업 전략의 기본 원칙:
- 3개 복사본: 원본 포함 3개의 데이터 복사본 유지
- 2가지 저장 매체: 서로 다른 유형의 저장소에 저장
- 1개 원격 저장: 최소 1개는 오프사이트(원격 위치)에 저장
1. 데이터베이스 백업
MySQL / MariaDB 백업
#!/bin/bash
# /usr/local/bin/backup-db.sh
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backup/db"
DB_NAME="myapp"
DB_USER="root"
DB_PASS="패스워드"
mkdir -p $BACKUP_DIR
# 전체 데이터베이스 백업
mysqldump -u $DB_USER -p$DB_PASS \
--single-transaction \
--quick \
--lock-tables=false \
$DB_NAME | gzip > $BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz
# 30일 이상 된 백업 삭제
find $BACKUP_DIR -name "*.sql.gz" -mtime +30 -delete
echo "DB 백업 완료: ${DB_NAME}_${DATE}.sql.gz"
PostgreSQL 백업
sudo -u postgres pg_dump myapp | gzip > /backup/db/myapp_$(date +%Y%m%d).sql.gz
2. 파일 백업 (웹 루트, 업로드 파일)
rsync를 이용한 로컬 백업
#!/bin/bash
# 웹 루트 백업
rsync -avz --delete \
/var/www/html/ \
/backup/www/
# 업로드 파일 백업
rsync -avz \
/var/www/html/uploads/ \
/backup/uploads/
증분 백업 (rsync + 날짜 디렉토리)
DATE=$(date +%Y%m%d)
YESTERDAY=$(date -d "yesterday" +%Y%m%d)
rsync -avz --delete \
--link-dest=/backup/www/$YESTERDAY \
/var/www/html/ \
/backup/www/$DATE/
--link-dest 옵션으로 변경된 파일만 새로 복사하고 나머지는 하드링크로 처리해 저장 공간을 절약합니다.
3. 원격 백업 (오프사이트)
로컬 백업만으로는 서버 전체 장애나 데이터센터 문제 시 복구가 불가능합니다. 원격 위치에 추가 백업을 저장하세요.
AWS S3 또는 호환 오브젝트 스토리지 업로드
apt install awscli -y
aws configure # AWS 자격 증명 설정
# S3에 업로드
aws s3 cp /backup/db/ s3://my-backup-bucket/db/ --recursive
aws s3 cp /backup/www/ s3://my-backup-bucket/www/ --recursive
rclone을 이용한 다양한 클라우드 업로드
rclone은 AWS S3, Google Cloud Storage, Backblaze B2 등 다양한 클라우드 스토리지를 지원합니다.
apt install rclone -y
rclone config # 클라우드 스토리지 설정
# 백업 업로드
rclone copy /backup/db remote:my-backup/db
4. 자동 백업 스케줄 설정
crontab으로 자동화
crontab -e
# 매일 새벽 2시 DB 백업
0 2 * * * /usr/local/bin/backup-db.sh >> /var/log/backup.log 2>&1
# 매일 새벽 3시 파일 백업
0 3 * * * rsync -avz /var/www/html/ /backup/www/ >> /var/log/backup.log 2>&1
# 매일 새벽 4시 원격 백업 (S3)
0 4 * * * aws s3 sync /backup/ s3://my-backup-bucket/ >> /var/log/backup.log 2>&1
# 매주 일요일 전체 DB 덤프
0 1 * * 0 mysqldump -u root myapp | gzip > /backup/weekly/myapp_$(date +\%Y\%m\%d).sql.gz
5. 백업 복구 테스트
백업은 복구가 가능해야 의미가 있습니다. 정기적으로 복구 테스트를 실시하세요.
# DB 복구 테스트 (테스트 DB에서 수행)
gunzip -c /backup/db/myapp_20260119.sql.gz | mysql -u root test_restore
# 파일 복구 테스트
rsync -avz /backup/www/ /tmp/restore_test/
백업 용량 계획
| 데이터 유형 | 백업 주기 | 보관 기간 |
|---|---|---|
| 데이터베이스 | 매일 | 30일 |
| 웹 파일 | 매일 | 14일 |
| 사용자 업로드 | 매일 | 30일 |
| 주간 전체 백업 | 매주 | 3개월 |
마치며
일본 서버 운영에서 백업은 비용이 아니라 보험입니다. 백업 없이 운영하다가 장애가 발생하면 복구 비용이 훨씬 크게 발생합니다. 오늘 바로 백업 자동화를 설정하세요. 백업 설정이나 스토리지 구성에 대한 문의는 텔레그램 @tcp80net으로 주세요.