阿克森雲登入 / 註冊English/中文/cn繁體/tw

第 5 課 · 備份與恢復演練(備份不算數,恢復才算)

上架第一小時 · L2 · 第 5 / 6 節 · 約 3 分鍾

備份界的兩句真話:「有備份」是最常見的錯覺,「上個月演練恢復用了 47 分鍾」才是可信的安全感。這一課搭一套最小可用的備份體系(3-2-1),然後——更重要的——教你做恢復演練:壞備份的三種死法都只在演練裏暴露。

備份 3-2-1 與演練閉環示意

3-2-1:最小備份體系的結構

行業通行口徑:3 份數據、2 種介質、1 份異地。單服務器的落地:本機快照(第 1 份,秒級恢復小事故)+ 本地備份目錄(第 2 份,每日打包)+ 異地副本(第 3 份,推到另一臺機器或對象存儲——機房着火/賬號事故時唯一的生還者)。自動化腳本骨架:

# /usr/local/bin/backup.sh —— 每日打包、滾動保留、推異地
#!/bin/bash
set -euo pipefail
STAMP=$(date +%F)
tar czf /backup/site-$STAMP.tar.gz /var/www /etc/nginx        # 網站與配置
mysqldump --all-databases | gzip > /backup/db-$STAMP.sql.gz   # 數據庫全量
find /backup -name "*.gz" -mtime +7 -delete                    # 保留 7 天滾動
rsync -az /backup/ backupuser@異地IP:/data/backup/$(hostname)/ # 異地推送(SSH 密鑰)
echo "$STAMP ok" >> /var/log/backup.log                        # 成功心跳
# crontab:30 3 * * * /usr/local/bin/backup.sh
# 心跳的意義:監控只查「backup.log 最後一行是不是今天」——備份靜默失敗是最壞的死法

壞備份的三種死法(演練才能發現)

死法症狀演練哪一步暴露
任務早死了crontab 還在,磁盤滿/憑據過期後每次靜默失敗第①步拉回的文件日期是三個月前
備份不完整tar 少目錄、dump 截斷、只備了數據沒備配置第③步真恢復後關鍵數據缺失
恢復步驟失傳文件都在,「先恢復哪個、權限怎麼修」沒人記得第③步卡住開始翻聊天記錄

季度恢復演練:五步腳本

# 演練機:臨時 VPS 或測試機(隔離環境,別在生產上演練恢復)
# ① 拉回:從異地存儲拉最近全量(驗證異地鏈路與憑據有效)
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 "db ok"
# ③ 真恢復:解包+導入隔離環境
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
# ④ 計時與斷言:RTO 實測值 + 關鍵數據抽查
mysql restore_drill -e "SHOW TABLES;" | head -5
# ⑤ 記錄一頁紙(日期/備份集/RTO 實測/發現的問題/下次日期),清理演練數據

記錄裏最值錢的兩個數字:RTO 實測值(拉回到可用的分鍾數——你唯一可信的恢復時間承諾)與發現的問題(演練的全部價值在這一行)。節奏:季度全量演練、月度只做①②輕量抽查、備份腳本變更後當周加練。

備份範圍清單:別只備「看得見的」

新手備份最常漏的不是數據而是讓數據能跑起來的東西。按清單核對:①業務數據(數據庫 dump、上傳文件目錄);②配置(/etc/nginx、/etc/php 類、應用配置——「重裝後網站起不來」多半是配置沒備);③憑據的獲取路徑(不是把密碼文件備進去,而是確認「密碼管理器可訪問 + 恢復流程文檔在異地可讀」——機器沒了時你要能在別的設備上找到鑰匙);④環境定義(裝機清單/依賴版本/Dockerfile——恢復的目標是「業務能跑」,不是「文件都在」)。一個檢驗問題:假設這臺機器現在物理消失,你手邊的備份 + 一臺新機器,多久能恢復服務?答不出來,就回到演練那一步。

兩個口徑問題:RPO 與加密

RPO(最多丟多久數據)由備份頻率決定:每日備份 RPO=24 小時——凌晨備份、傍晚出事,這一天的數據就是代價。數據庫類關鍵數據用 binlog/增量把 RPO 壓到分鍾級;內容站每日全量通常夠。備份要加密:異地副本離開了你的機器邊界,全量數據庫備份明文躺在第三方存儲上是重大暴露面——gpg/age 加密後再推送(密鑰單獨保管,密鑰丟了備份等於沒有——兩把鑰匙分開放)。

本節小結

  • 3-2-1 最小體系:本機快照 + 每日打包 + 異地推送,成功心跳進日志供監控;
  • 壞備份三種死法(任務死了/不完整/步驟失傳)只在演練裏暴露——季度五步演練,RTO 記實測值;
  • RPO 由頻率決定、按數據價值分級;異地備份必須加密,密鑰與備份分開保管。