備份成功訊息只證明某個工作排程跑完,不代表資料完整、密鑰可用、版本相容或真的能還原。網站備份必須從 RPO、RTO、資料範圍、異地保存與還原演練一起設計。
先定義 RPO 與 RTO
RPO 是最多可接受遺失多少時間的資料;RTO 是服務必須在多久內恢復。內容站可能接受每日備份,交易或會員系統則需要更短的資料庫備份與日誌。
沒有這兩個目標,就無法判斷備份頻率、成本與還原優先序是否合理。
備份範圍要包含資料、設定與依賴
- 網站程式與可重建的 release artifact。
- 資料庫、上傳檔案與物件儲存。
- 環境設定、Web Server、排程、DNS 與憑證部署方式。
- 套件 lockfile、容器映像與基礎設施程式碼。
- 復原所需的金鑰清單與輪替程序,但秘密應分開加密保存。
採用 3-2-1 並隔離勒索風險
至少保留三份資料、兩種介質、一份異地或離線。雲端快照與正式系統在同一帳號、同一管理權限下,遇到帳號接管時可能一起被刪除。
備份帳號應使用獨立憑證、不可變保存與刪除保護,應用主機只具備寫入新備份的最低權限。
產生一致性備份並驗證雜湊
以下只示範流程骨架;實際資料庫要使用對應的一致性選項:
set -euo pipefail
stamp=$(date +%Y%m%d-%H%M%S)
mkdir -p "/backup/$stamp"
mysqldump --single-transaction --routines --events appdb | gzip -9 > "/backup/$stamp/appdb.sql.gz"
tar -C /srv/www -czf "/backup/$stamp/uploads.tar.gz" uploads
sha256sum /backup/$stamp/* > "/backup/$stamp/SHA256SUMS"
age -r "$BACKUP_RECIPIENT" -o "/backup/$stamp.tar.age" < <(tar -C /backup -cf - "$stamp")不要把資料庫密碼直接寫在命令列,避免出現在程序清單與 history;使用受限的 option file 或秘密管理服務。
還原演練要在隔離環境完整啟動
- 從異地位置取得指定版本備份。
- 驗證雜湊、解密與解壓縮。
- 建立乾淨主機與相容版本的資料庫。
- 匯入資料、檔案與設定。
- 執行登入、查詢、上傳、排程與外部整合測試。
- 記錄實際耗時、缺少項目與下一步修正。
只打開壓縮檔或執行 SQL 語法檢查,不算完整還原測試。
保留版本並定期測試刪除與災難情境
可採每日 14 份、每週 8 份、每月 12 份等分層保留,依 RPO 與法規調整。除了硬體故障,也要演練誤刪資料、惡意加密、雲端帳號停權與最新備份已受污染的情境。
合格標準:能由指定人員在目標 RTO 內,從不依賴正式環境的備份恢復可驗證服務。
演練紀錄
記錄備份版本、開始與完成時間、實際 RPO/RTO、失敗步驟與修正負責人,下一次演練才能驗證改善是否生效。