복원할 수 있는 백업은 짜증나는 오후 한나절과 프로젝트를 잃는 일의 차이를 만듭니다. 기본 VPS 백업 가이드에서 개념을 다뤘습니다. 이 글은 한 걸음 더 나아가 restic과 BorgBackup을 다룹니다. 두 도구 모두 두 번째 서버나 오브젝트 스토리지에 암호화 및 중복 제거 백업을 만들어 줍니다.
단순 복사 대신 restic이나 borg를 쓰는 이유
- 중복 제거. 변경된 데이터만 저장되므로 매일 찍는 스냅샷도 작게 유지됩니다.
- 암호화. 데이터는 서버를 떠나기 전에 암호화됩니다.
- 스냅샷. 과거 어느 날의 상태로든 복원할 수 있습니다.
- 검증. 두 도구 모두 저장소 무결성을 검사할 수 있습니다.
하나를 고르세요. Restic은 간단하며 SFTP와 S3 호환 스토리지를 포함한 다양한 스토리지 유형에서 작동합니다. Borg는 매우 효율적이며 borg가 설치된 서버에 SSH로 연결하여 작동합니다.
백업을 보낼 곳
유일한 백업을 같은 서버에 저장하지 마세요. 다른 위치의 두 번째 VPS, S3 호환 버킷, 또는 스토리지 박스를 사용하세요. 디스크가 큰 소형 VPS는 저렴한 백업 대상이 됩니다. VPS 요금제를 참고하세요.
Restic: 설정
sudo apt install -y restic
export RESTIC_REPOSITORY="sftp:backup@backup.example.com:/srv/restic/myserver"
export RESTIC_PASSWORD_FILE=/root/.restic-pass
restic init
길고 무작위한 비밀번호로 비밀번호 파일을 만들고 사본을 오프라인에 보관하세요. 이 비밀번호가 없으면 백업을 복원할 수 없습니다.
restic backup /etc /home /var/www --exclude-caches
restic snapshots
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune
restic check
Borg: 설정
sudo apt install -y borgbackup
export BORG_REPO="ssh://backup@backup.example.com/srv/borg/myserver"
borg init --encryption=repokey-blake2
borg create --stats --compression zstd ::'{hostname}-{now:%Y-%m-%d}' /etc /home /var/www
borg prune --keep-daily 7 --keep-weekly 4 --keep-monthly 6
borg check
borg key export로 저장소 키를 내보내 보관하세요.
데이터베이스는 주의가 필요함
실행 중인 데이터베이스 파일을 그대로 복사하지 마세요. 먼저 덤프한 다음 덤프를 백업하세요.
mysqldump --single-transaction --all-databases | gzip > /var/backups/db.sql.gz
sudo -u postgres pg_dumpall | gzip > /var/backups/pg.sql.gz
스케줄 설정
systemd 타이머나 cron으로 백업을 실행하세요. 간단한 cron 줄은 다음과 같습니다.
15 3 * * * root /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
실패했을 때 알림을 받도록 하세요. 예를 들어 스크립트 끝에 모니터링 핑을 넣을 수 있습니다.
복원 테스트
restic restore latest --target /tmp/restore-test --include /etc/nginx
ls /tmp/restore-test
가끔 여분의 장비에서 실제 복원을 테스트하세요. 한 번도 테스트하지 않은 백업은 희망일 뿐입니다.