소중한 웹사이트 데이터, 혹시 모를 사고에 대비해 자동으로 백업해 보세요. 이 가이드를 따라 하면 우분투 서버에서 파일과 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 접속 정보 설정하기
보안을 위해 비밀번호를 스크립트 안에 직접 노출하지 않도록 별도의 파일을 사용합니다.
.my.cnf파일 생성: 스크립트가 백업할 사용자 계정으로 로그인한 상태에서 홈 디렉터리(~)에 파일을 생성합니다.sudo nano ~/.my.cnf- 내용 입력: 아래 내용을 파일에 추가하고 저장하세요.
backupuser와your_mysql_password를 실제 MySQL 계정 정보로 변경해야 합니다. - 파일 권한 설정: 이 파일은 민감한 정보를 담고 있으므로, 오직 소유자만 접근할 수 있도록 권한을 설정합니다.
chmod 600 ~/.my.cnf
[mysqldump] user=backupuser password="your_mysql_password"
—
3단계: 스크립트 실행 권한 부여하기
방금 만든 backup.sh 파일에 실행 권한을 부여해야 합니다.
sudo chmod +x backup.sh
—
4단계: cron으로 자동 실행하기
이제 마지막 단계입니다. cron을 사용해 스크립트가 매일 지정된 시간에 자동으로 실행되도록 등록합니다.
- cron 편집기 열기:
crontab -e - cron job 추가: 편집기의 가장 아래 줄에 다음 코드를 추가하세요.
0 2 * * * /bin/bash /경로/to/backup.sh > /dev/null 2>&10 2 * * *: 매일 새벽 2시에 실행하라는 뜻입니다. 원하는 시간으로 변경할 수 있습니다./경로/to/backup.sh:backup.sh파일이 저장된 실제 경로를 입력하세요.
이렇게 하면 이제 매일 새벽 2시에 백업 스크립트가 자동으로 실행되어 /var/backups/web 폴더에 백업 파일이 생성됩니다.
—
문제 해결: mysqldump 오류
만약 스크립트 실행 시 mysqldump: [Warning] Using a password...와 같은 경고가 나온다면, 2단계에서 .my.cnf 파일을 올바르게 설정했는지 확인하세요. 이 경고는 스크립트의 기능에 영향을 주지 않으므로 무시해도 되지만, 보안상 .my.cnf를 사용하는 것이 좋습니다.