備份不算數,恢復演練才算:季度演練腳本
「有備份」和「能恢復」之間隔着一次演練。本文給出季度恢復演練的完整腳本(拉回、校驗、真恢復、計時、歸檔五步)、RTO/RPO 的記錄口徑、以及演練發現的三類典型壞備份。
備份界最貴的一句話是「我們有備份」——最值錢的一句話是「上個月演練恢復用了 47 分鍾」。沒演練過的備份等於沒有備份:壓縮包缺文件、dump 被截斷、異地密鑰過期、恢復步驟只存在於離職同事的腦子裏——這些壞法都只在演練裏暴露。本篇是安全基線中心的演練實操篇:季度演練的完整腳本與記錄口徑。備份本身的搭建(3-2-1 與自動化)在面板與備份。
演練五步:完整腳本
# ── 準備:一臺演練機(臨時 VPS / 測試機均可,$5.34 檔就夠)──
# 第①步 · 拉回:從異地存儲拉最近一份全量(驗證異地鏈路與憑據仍然有效)
rsync -az backupuser@異地IP:/data/backup/主機名/ /restore/ && ls -lh /restore/
# 第②步 · 校驗:歸檔完整性(不校驗直接恢復 = 賭運氣)
tar tzf /restore/site-最近日期.tar.gz > /dev/null && echo "tar 結構 ok"
gzip -t /restore/db-最近日期.sql.gz && echo "gzip 完整性 ok"
# 有校驗和習慣的:sha256sum -c /restore/SHA256SUMS(備份時生成)
# 第③步 · 真恢復:解包 + 數據庫導入到隔離環境(演練機就是隔離環境)
mkdir -p /restore/test && tar xzf /restore/site-*.tar.gz -C /restore/test
mysql -e "CREATE DATABASE restore_drill" && zcat /restore/db-*.sql.gz | mysql restore_drill
# 第④步 · 計時與斷言:記錄耗時,抽查關鍵數據在不在
time (echo "恢復計時以第①步起點算") # RTO 實測值
mysql restore_drill -e "SHOW TABLES;" | head # 關鍵表在
grep -r "關鍵業務標識詞" /restore/test --include="*.conf" -l | head -3 # 關鍵文件在
# 第⑤步 · 歸檔:演練記錄一頁紙(模板見下節),演練數據刪除
rm -rf /restore/test && echo "演練環境已清理"
演練記錄:一頁紙模板
| 字段 | 本次填寫 | 爲什麼記 |
|---|---|---|
| 日期 / 演練人 | ____ | 責任與節奏可見 |
| 備份集(哪一天的哪份) | ____ | 驗證的是「最近的」不是「隨手挑的」 |
| RTO 實測(拉回到可用) | ____ 分鍾 | 這是你唯一可信的恢復時間承諾 |
| RPO 確認(數據截止到) | ____ | 對照業務可接受的數據丟失窗口 |
| 發現的問題與修復項 | ____ | 演練的全部價值在這一行 |
| 下次演練日期 | ____ | 季度節奏進日歷,不進「有空再說」 |
記錄歸檔紀律:演練記錄與備份集分開存放(記錄在文檔庫/倉庫,備份在存儲端)——災難發生時,你需要在拿不到服務器的情況下找到「怎麼恢復」的說明。
演練最常揪出的三類壞備份
- 壞法一:備份任務早就死了——crontab 還在,但磁盤滿/憑據過期/路徑變更後每次都在靜默失敗;發現方式:演練第①步拉回來的文件日期是三個月前。防御:備份腳本成功後 touch 一個心跳文件,監控撥測檢查心跳時間戳——「備份成功的證據」和備份本身同樣重要;
- 壞法二:備份不完整——tar 少了目錄(SRC 變量沒更新)、mysqldump 沒帶 --all-databases、配置文件在 /etc 而數據在 /var 只備了一個;發現方式:第③步真恢復後關鍵數據缺。防御:備份腳本裏寫「清單斷言」(備份後 tar tzf 對照預期目錄清單,缺了就報警);
- 壞法三:恢復步驟失傳——備份文件都在,但「先恢復哪個、數據庫怎麼導入、權限怎麼修」沒人記得;發現方式:第③步卡住開始翻聊天記錄。防御:恢復步驟寫成腳本(restore.sh)與備份腳本同庫存放——恢復腳本也是備份的一部分。
頻率與範圍:季度演練的最小安排
- 季度全量演練:本篇五步全走,含異地拉回與真恢復——一年四次是「可信」的底線;
- 月度輕量抽查:只做①②(拉回 + 校驗),10 分鍾——驗證鏈路與完整性,不驗證恢復;
- 變更後即時演練:備份腳本改過、存儲換過、機器遷移過——當周做一次五步全走,變更是壞備份的最大來源;
- 年度災難桌面推演:不真恢復,走流程——「服務器全毀 + 異地存儲一半不可用」的假設下誰做什麼、先恢復哪個系統、對外通告什麼——紙面推演暴露的是組織問題,腳本演練暴露的是技術問題,兩類都要練。
演練的時間成本賬:季度全量演練一次約 1–2 小時(含記錄),月度抽查一次 10 分鍾——全年投入不到兩個工作日,換來的是「恢復時間從許願變成實測數字」。這筆賬在任何規模下都劃算,因爲它對衝的是唯一確定會發生的風險:備份總有一天要用,區別只在「那天你有沒有演練過」。
與整體安全基線的關系
恢復能力是安全體系的最後一環也是唯一保證「一定用得上」的一環:防火牆與加固降低事故概率,備份與演練兜住事故後果——概率可以僥幸,後果不能。基線三件套的執行順序:SSH 加固(第一小時)→ 防火牆基線(第一小時)→ 本篇(第一周建立、每季度驗證)。
下一步:把下次演練日期寫進今天的日歷,把 restore.sh 寫進今天的倉庫。備份搭建與自動化紅線在面板與備份;演練用的臨時機器入門 VPS $5.34/月隨開隨刪;全景回安全基線中心。