초보자를 위한 우분투 서버 백업 자동화 완벽 매뉴얼

소중한 웹사이트 데이터, 혹시 모를 사고에 대비해 자동으로 백업해 보세요. 이 가이드를 따라 하면 우분투 서버에서 파일과 MySQL 데이터베이스를 매일 자동으로 백업하는 시스템을 구축할 수 있습니다.

1단계: 백업 스크립트 작성하기

먼저, 백업을 실행할 셸 스크립트 파일을 만듭니다. 서버의 SSH에 접속하여 backup.sh 파일을 생성하고 아래 코드를 복사해서 붙여넣으세요.

sudo nano backup.sh

backup.sh 파일 내용:

#!/bin/bash

# --- 백업 설정 ---
BACKUP_DIR="/var/backups/web"
RETENTION_DAYS=7

# MySQL 접속 정보 (보안을 위해 ~/.my.cnf 파일 사용 권장)
MYSQL_USER="backupuser"

# 백업할 사이트 목록
# 형식: "사이트이름:파일경로:DB이름"
SITES=(
  "일반사이트1:/var/www/html/site1:db_site1"
  "워드프레스사이트1:/var/www/html/wp-site1:db_wp_site1"
)

# --- 백업 실행 ---
DATE=$(date +"%Y%m%d%H%M%S")
echo "### 웹사이트 백업 시작: $DATE ###"

# 백업 디렉터리 생성 (없을 경우)
if [ ! -d "$BACKUP_DIR" ]; then
  mkdir -p "$BACKUP_DIR"
fi

for SITE_INFO in "${SITES[@]}"; do
  # 정보 분리
  IFS=':' read -r SITE_NAME SITE_PATH DB_NAME <<< "$SITE_INFO"
  echo "--- $SITE_NAME 백업 중 ---"

  # DB 백업 (mysqldump)
  DB_BACKUP_FILE="${BACKUP_DIR}/${SITE_NAME}_db_${DATE}.sql.gz"
  mysqldump "${DB_NAME}" | gzip > "$DB_BACKUP_FILE"
  if [ $? -eq 0 ]; then
    echo "✔ DB 백업 성공: $DB_BACKUP_FILE"
  else
    echo "❌ DB 백업 실패: $DB_BACKUP_FILE"
  fi

  # 파일 백업 (tar)
  SITE_BACKUP_FILE="${BACKUP_DIR}/${SITE_NAME}_files_${DATE}.tar.gz"
  tar -czf "$SITE_BACKUP_FILE" -C "$(dirname "$SITE_PATH")" "$(basename "$SITE_PATH")"
  if [ $? -eq 0 ]; then
    echo "✔ 파일 백업 성공: $SITE_BACKUP_FILE"
  else
    echo "❌ 파일 백업 실패: $SITE_BACKUP_FILE"
  fi
  echo "----------------------------"
done

# --- 오래된 파일 삭제 ---
echo "### 오래된 백업 파일 삭제 중 (보관 기간: ${RETENTION_DAYS}일) ###"
find "$BACKUP_DIR" -type f -name "*.tar.gz" -o -name "*.sql.gz" -mtime +"$RETENTION_DAYS" -exec rm {} \;
echo "### 백업 완료 ###"

2단계: MySQL 접속 정보 설정하기

보안을 위해 비밀번호를 스크립트 안에 직접 노출하지 않도록 별도의 파일을 사용합니다.

  1. .my.cnf 파일 생성: 스크립트가 백업할 사용자 계정으로 로그인한 상태에서 홈 디렉터리(~)에 파일을 생성합니다. sudo nano ~/.my.cnf
  2. 내용 입력: 아래 내용을 파일에 추가하고 저장하세요. backupuseryour_mysql_password를 실제 MySQL 계정 정보로 변경해야 합니다.
  3. 파일 권한 설정: 이 파일은 민감한 정보를 담고 있으므로, 오직 소유자만 접근할 수 있도록 권한을 설정합니다. chmod 600 ~/.my.cnf
[mysqldump] user=backupuser password="your_mysql_password"

3단계: 스크립트 실행 권한 부여하기

방금 만든 backup.sh 파일에 실행 권한을 부여해야 합니다.

sudo chmod +x backup.sh

4단계: cron으로 자동 실행하기

이제 마지막 단계입니다. cron을 사용해 스크립트가 매일 지정된 시간에 자동으로 실행되도록 등록합니다.

  1. cron 편집기 열기: crontab -e
  2. cron job 추가: 편집기의 가장 아래 줄에 다음 코드를 추가하세요. 0 2 * * * /bin/bash /경로/to/backup.sh > /dev/null 2>&1
    • 0 2 * * *: 매일 새벽 2시에 실행하라는 뜻입니다. 원하는 시간으로 변경할 수 있습니다.
    • /경로/to/backup.sh: backup.sh 파일이 저장된 실제 경로를 입력하세요.

이렇게 하면 이제 매일 새벽 2시에 백업 스크립트가 자동으로 실행되어 /var/backups/web 폴더에 백업 파일이 생성됩니다.

문제 해결: mysqldump 오류

만약 스크립트 실행 시 mysqldump: [Warning] Using a password...와 같은 경고가 나온다면, 2단계에서 .my.cnf 파일을 올바르게 설정했는지 확인하세요. 이 경고는 스크립트의 기능에 영향을 주지 않으므로 무시해도 되지만, 보안상 .my.cnf를 사용하는 것이 좋습니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤