Một bản sao lưu bạn có thể khôi phục là sự khác biệt giữa một buổi chiều khó chịu và việc mất cả một dự án. Hướng dẫn sao lưu VPS cơ bản trình bày ý tưởng này. Bài này đi xa hơn với restic và BorgBackup: hai công cụ tạo bản sao lưu mã hóa, khử trùng lặp sang máy chủ thứ hai hoặc object storage.
Vì sao dùng restic hoặc borg thay vì sao chép thông thường
- Khử trùng lặp. Chỉ dữ liệu thay đổi được lưu, nên snapshot hằng ngày luôn nhỏ.
- Mã hóa. Dữ liệu được mã hóa trước khi rời khỏi máy chủ của bạn.
- Snapshot. Bạn có thể khôi phục trạng thái của bất kỳ ngày nào trong quá khứ.
- Xác minh. Cả hai công cụ đều có thể kiểm tra tính toàn vẹn của kho lưu trữ.
Hãy chọn một. Restic đơn giản và hoạt động với nhiều loại lưu trữ, gồm SFTP và lưu trữ tương thích S3. Borg rất hiệu quả và hoạt động qua SSH đến máy chủ đã cài borg.
Gửi bản sao lưu đến đâu
Đừng bao giờ lưu bản sao lưu duy nhất trên cùng máy chủ. Hãy dùng một VPS thứ hai ở vị trí khác, một bucket tương thích S3 hoặc một storage box. Một VPS nhỏ với đĩa lớn là nơi nhận bản sao lưu giá rẻ. Xem các gói VPS.
Restic: thiết lập
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
Tạo tệp mật khẩu với một mật khẩu ngẫu nhiên dài và lưu một bản sao ngoại tuyến. Nếu không có mật khẩu đó, các bản sao lưu không thể được khôi phục.
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: thiết lập
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
Xuất và lưu khóa của kho lưu trữ bằng borg key export.
Cơ sở dữ liệu cần cẩn thận
Đừng sao chép các tệp cơ sở dữ liệu đang chạy. Hãy dump chúng trước rồi sao lưu bản dump:
mysqldump --single-transaction --all-databases | gzip > /var/backups/db.sql.gz
sudo -u postgres pg_dumpall | gzip > /var/backups/pg.sql.gz
Lập lịch
Chạy sao lưu từ systemd timer hoặc cron. Một dòng cron đơn giản:
15 3 * * * root /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
Tự cảnh báo khi thất bại, ví dụ bằng một ping giám sát ở cuối script.
Kiểm tra khôi phục
restic restore latest --target /tmp/restore-test --include /etc/nginx
ls /tmp/restore-test
Thỉnh thoảng hãy kiểm tra khôi phục thực tế trên một máy dự phòng. Một bản sao lưu chưa từng được kiểm tra chỉ là hy vọng.