서버를 운영하는 사람이라면 누구나 한 번쯤 데이터 손실의 공포를 경험합니다. 디스크는 예고 없이 고장 나고, 실수로 파일을 지우는 일도 흔합니다. 이를 막아주는 유일한 보험이 백업입니다. 그것도 사람이 잊지 않도록 자동화된 백업이어야 합니다. 이 글에서 실전 방법을 정리합니다.
1. 무엇을 백업할 것인가
먼저 백업 대상을 정합니다. 보통 다음 세 가지가 핵심입니다. 첫째는 웹 파일이나 업로드된 데이터, 둘째는 데이터베이스, 셋째는 서버 설정 파일입니다. 이 세 가지만 있으면 서버가 통째로 날아가도 복구할 수 있습니다.
2. 간단한 백업 스크립트 작성
날짜별로 압축 파일을 만드는 기본 스크립트 예시입니다.
#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR=/home/deploy/backups
# 웹 파일 압축
tar -czf $BACKUP_DIR/web_$DATE.tar.gz /var/www/html
# 데이터베이스 덤프
mysqldump -u root -p비밀번호 mydb > $BACKUP_DIR/db_$DATE.sql
# 7일 지난 백업 삭제
find $BACKUP_DIR -type f -mtime +7 -delete
마지막 줄은 오래된 백업을 자동으로 정리해, 디스크가 백업 파일로 가득 차는 것을 막아줍니다.
3. 실행 권한 부여
스크립트를 실행 가능하게 만듭니다.
chmod +x /home/deploy/backup.sh
4. 크론탭으로 자동 실행
매일 새벽 3시에 백업이 돌도록 크론에 등록합니다.
crontab -e
다음 줄을 추가합니다.
0 3 * * * /home/deploy/backup.sh >> /home/deploy/backup.log 2>&1
이제 사람이 신경 쓰지 않아도 매일 백업이 만들어집니다.
5. 원격지에도 보관하기 (중요)
같은 서버에만 백업을 두면, 서버가 통째로 고장 났을 때 백업도 함께 사라집니다. 반드시 다른 위치에 복사본을 두어야 합니다. rsync로 다른 서버나 NAS에 보낼 수 있습니다.
rsync -avz /home/deploy/backups/ user@원격IP:/backup/
클라우드 스토리지로 올리는 방법도 좋은 선택입니다.
6. 3-2-1 백업 원칙
널리 쓰이는 백업 원칙은 3-2-1입니다. 데이터 사본 3개, 서로 다른 저장 매체 2종, 그중 1개는 원격지에 보관하는 것입니다. 이 원칙만 지켜도 웬만한 사고에서 데이터를 지킬 수 있습니다.
7. 복구 테스트도 잊지 말기
백업의 가장 흔한 함정은 “백업은 했는데 복구가 안 되는” 경우입니다. 가끔은 실제로 백업 파일로 복구가 되는지 테스트해 봐야 진짜 백업이라 할 수 있습니다.
마무리
백업 스크립트 작성 → 크론 자동화 → 원격 보관 → 복구 테스트, 이 흐름만 한 번 세팅해두면 마음이 한결 편해집니다. 데이터는 잃고 나서 후회하기엔 너무 소중합니다. 오늘 바로 백업 자동화를 설정해 두시길 권합니다.