서버 운영에서 백업은 가장 중요한 요소 중 하나입니다. 아무리 안정적인 서버라도 하드웨어 장애, 실수로 인한 파일 삭제, 랜섬웨어 감염 등 예상치 못한 상황이 발생할 수 있습니다. 이번 글에서는 cron과 rsync를 활용하여 자동 백업 스크립트를 구성하는 방법을 알아보겠습니다.

백업 전략

백업을 구성하기 전에 먼저 전략을 세워야 합니다:

  • 무엇을 백업할 것인가: 웹 파일, 데이터베이스, 설정 파일
  • 얼마나 자주 백업할 것인가: 일별, 주별
  • 얼마나 오래 보관할 것인가: 7일, 30일

rsync를 이용한 파일 백업

rsync는 Linux에서 가장 많이 사용되는 파일 동기화 도구입니다. 변경된 파일만 전송하므로 효율적입니다.

#!/bin/bash

# 백업 설정
BACKUP_SRC="/var/www/html"
BACKUP_DEST="/backup/web"
DATE=$(date +%Y%m%d)
BACKUP_DIR="$BACKUP_DEST/$DATE"

# 백업 디렉토리 생성
mkdir -p "$BACKUP_DIR"

# rsync로 백업 실행
rsync -avz --delete \
  "$BACKUP_SRC/" \
  "$BACKUP_DIR/"

echo "백업 완료: $BACKUP_DIR"

MySQL 데이터베이스 백업

웹 서비스에서 데이터베이스 백업은 필수입니다.

#!/bin/bash

DB_USER="root"
DB_PASS="your_password"
DB_NAME="your_database"
BACKUP_DIR="/backup/db"
DATE=$(date +%Y%m%d_%H%M%S)

mkdir -p "$BACKUP_DIR"

mysqldump -u"$DB_USER" -p"$DB_PASS" "$DB_NAME" \
  | gzip > "$BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz"

echo "DB 백업 완료: ${DB_NAME}_${DATE}.sql.gz"

cron으로 자동화하기

crontab -e 명령으로 cron 작업을 등록합니다:

# 매일 새벽 3시에 웹 파일 백업
0 3 * * * /home/backup/web_backup.sh >> /var/log/backup.log 2>&1

# 매일 새벽 3시 30분에 DB 백업
30 3 * * * /home/backup/db_backup.sh >> /var/log/backup.log 2>&1

오래된 백업 자동 삭제

디스크 용량 관리를 위해 오래된 백업을 자동으로 삭제합니다:

# 30일 이상 된 백업 파일 삭제
find /backup -mtime +30 -delete

TCP-80.NET의 내부망 백업

TCP-80.NET에서는 모든 서버에 내부 네트워크를 통한 무료 백업 서비스를 제공합니다. 외부 인터넷을 거치지 않고 빠른 내부망으로 백업이 이루어지므로 서버 성능에 영향을 최소화합니다.

개인적인 백업 솔루션과 병행하여 사용하면 더욱 안전하게 데이터를 보호할 수 있습니다.