VPS 備份與快照指南
伺服器可能因為錯誤的更新、人為失誤、惡意程式或硬體問題而故障。完善的計畫會結合快照、備份與經過測試的還原流程。在 ONIE 上,胡志明市雲端伺服器支援快照與備份,你也可以加購 Block Storage 來存放資料。
快照與備份的差異
| 快照 | 備份 | |
|---|---|---|
| 定義 | 某一時間點的磁碟狀態副本 | 伺服器或其資料的獨立副本 |
| 適用情境 | 升級或修改設定前的快速還原 | 復原遺失、損毀或刪除的資料 |
| 保存位置 | 靠近原始伺服器 | 獨立的儲存空間 |
| 速度 | 建立與還原都很快 | 較慢,視資料大小而定 |
兩者都要用:風險較高的變更前建立快照,其餘資料則定期備份。
3-2-1 原則
重要資料至少保留 3 份副本,存放在 2 種不同類型的儲存媒介上,並且其中 1 份存放在異地。只在同一台伺服器上做快照是不夠的。
備份檔案
rsync 只會複製有變動的內容:
rsync -aH --delete /var/www/ backup@backup-host:/srv/backups/www/restic 可將加密且去重複的備份存放到多個目標:
sudo apt install -y restic
restic -r sftp:backup@backup-host:/srv/restic init
restic -r sftp:backup@backup-host:/srv/restic backup /var/www /etc
restic -r sftp:backup@backup-host:/srv/restic forget --keep-daily 7 --keep-weekly 4 --prune備份資料庫
使用傾印(dump)來複製資料庫,而不是直接複製正在運作中的資料檔:
mysqldump --single-transaction --routines -u root wordpress | gzip > /var/backups/wordpress-$(date +%F).sql.gz若使用 PostgreSQL,請改用 pg_dump。
自動化
使用 cron 或 systemd timer 執行備份,並設定保留政策,自動刪除過舊的副本:
sudo crontab -e
# every day at 02:30
30 2 * * * /usr/local/bin/backup.sh測試還原
從未還原過的備份只能算是猜測。每月一次,把備份還原到備用伺服器,確認網站與資料都能正常運作。並將步驟寫成文件,讓團隊中的任何人都能執行。
大型變更前
先建立快照,進行變更,測試後再確認無誤即可刪除快照。這個做法與安全的 SSH 設定相輔相成,在升級 WordPress 網站時也很有幫助。
常見問題
How often should I back up?
Daily is common for sites and databases that change often. Back up more often if losing a day of data would hurt.
Are snapshots billed?
Snapshots and backups are billed by the space they use. See the current rates on the pricing page of the service.
Where should I store backups?
Not only on the same server. Use another location or provider so one failure cannot remove every copy.