幾乎每個網站都有備份。問題是「有備份」跟「出事時救得回來」之間,距離比多數人想像的遠。

同一台機器上的兩份,是一份

最常見的設定是:每天自動備份一次,存在同一台主機的另一個資料夾。

這個設定可以應付的狀況是:你自己改壞了、程式更新出問題、資料被誤刪。這些情況確實很常見,所以這個備份不是沒有用。

但它應付不了下面這些:

  • 硬碟損壞
  • 主機商的帳號出問題,整台機器被停用
  • 被勒索軟體加密 —— 它會把它找得到的檔案一起加密,包含你的備份
  • 操作失誤把整台機器重裝

這幾種的共同點是:機器出事的時候,備份跟著出事。

所以「備份」這個詞真正的意思是「放在另一個地方的那一份」。放在同一台機器上的那份,叫做快照,用途不一樣。

更可怕的是:備份成功,但檔案是空的

這一個我們實際遇過,而且它比沒有備份更危險,因為你以為你有。

資料庫備份的運作方式是跑一個匯出指令,把結果寫進檔案。如果那個指令因為某些原因失敗了 —— 密碼改過、權限不足、磁碟滿了 —— 它會寫出一個只有檔頭的檔案。

那個檔案通常只有幾十個位元組。

而備份排程的紀錄會寫著:執行完成,備份成功。

因為對排程來說,它確實跑完了,檔案也確實產生了。它不會去檢查檔案裡面有沒有東西。

我們看過一個站這樣跑了好幾個月,每天準時產生一個幾十位元組的空檔案,面板上一整排綠色的成功標記。

判斷方法很簡單:看檔案大小。一個正常的網站資料庫備份,壓縮後至少也有幾百 KB 到幾十 MB。如果你看到的是幾十位元組、或是零點幾 KB,那就是空的。

備份的三個地點原則

業界常講的原則是三份兩地,對中小企業的網站可以簡化成這樣:

第一份:主機上的。每天一次,救日常的誤操作。這份是給你自己用的,要快、要好取。

第二份:另一個服務上的。雲端硬碟、物件儲存、或是另一家主機商。這份是救機器整台出事。

這一份有一個細節要注意:第二份的存取權限要獨立。如果你用同一組帳號密碼管理主機和雲端硬碟,而那組帳號被盜,兩份一起沒了。

第三份(如果資料重要):離線的。每個月手動下載一份到公司的電腦或外接硬碟。這份是救前面兩種都被攻破的狀況,包括勒索軟體連雲端一起加密。

多數中小企業的網站做到第二份就夠了。但如果你的網站上有客戶訂單或會員資料,第三份值得做。

沒有還原過的備份不算備份

備份的價值不在於它存在,在於它能還原。而這兩件事需要分別驗證。

我們遇過幾種還原的時候才發現的問題:

  • 壓縮檔損壞,解不開
  • 資料庫匯出檔少了某幾張表(匯出的時候那幾張表正在被鎖住)
  • 備份的是檔案,但沒有備份資料庫 —— 或者反過來
  • 備份是完整的,但沒有人知道怎麼還原,也沒有文件

最後一項最常見。檔案都在,但真正出事的那天,沒有人記得資料庫叫什麼名字、設定檔要改哪幾行。

建議每半年做一次還原測試,還原到一個測試環境、不要動正式站。做完之後把步驟寫下來,寫成一份任何人照著做都能完成的文件。

這份文件的價值,在出事的那天會非常明顯。

五分鐘驗證你手上的備份

不用還原也能做的基本驗證,照順序做:

  • 找到最新一份備份,看檔案大小。幾十位元組就是空的,立刻處理。
  • 看檔案日期。是昨天或今天,還是三個月前?排程停掉是很常見的事(例如搬過家)。
  • 把它下載下來,解開看看。解不開的備份等於沒有備份。
  • 打開資料庫那個檔案,用文字編輯器看前幾行。應該會看到一堆建表語句。如果只有幾行註解就結束了,那就是空的。
  • 確認它在另一個地方。如果只在主機上,那第二份要補。

這五步不需要技術背景,而且它檢查的是最終結果,不是排程紀錄。

保留幾份才夠

最後一個常被忽略的點:只留最新一份是不夠的。

因為有些問題不是當天發現的。資料被誤刪、被改錯、網站被植入東西,可能一兩週後才有人注意到。這時候你需要的是「出事之前」那一份,而不是最新的那一份 —— 最新的那份已經把壞掉的狀態備份進去了。

比較實用的保留策略是:

  • 每日備份保留七份
  • 每週保留四份
  • 每月保留三到六份

這樣你的可還原範圍是半年,而占用的空間大概是十四份的量。

另外提醒一件事:如果你是用主機面板的備份功能,保留份數的設定有時候不只一個地方 —— 面板上設定的數字和實際執行的指令裡帶的參數可能不一致。改完之後過幾天去看實際檔案數量,才知道有沒有生效。

備份這件事的特性是:平常它沒有任何價值,需要用到的那一天它價值無限。所以它值得花半小時確認一次,而不是等到那一天。我們代管的站台是本機和異地各一份,而且每個月實際去看檔案大小和日期 —— 因為「排程回報成功」不等於「備份是好的」。如果你剛才檢查下來發現有問題,可以看一下我們的維護方案。