Skip to content

資料庫備份怎麼做?排程、異地保存與還原演練

jc-seo

資料庫備份的目標,是出事後能把資料還原到可以接受的時間點:定期做完整備份,再保存期間的變更紀錄,把備份檔加密後送到正式主機以外的地方,並實際還原過。以 MySQL 為例,可以用 mysqldump 搭配 –single-transaction 對 InnoDB 資料表做不鎖表的線上完整備份,再以二進位日誌作為增量備份,需要時先還原完整備份、再重播日誌補到指定時間點;PostgreSQL 則有 SQL 傾印、檔案系統層級備份與持續封存三種方式。使用雲端代管資料庫時,也要確認自動備份的保留期限與能否匯出。

先盤點要備份的資料庫與可接受的遺失範圍

客製系統與網站往往不只一個資料庫:官網內容、會員與訂單、預約紀錄、和外部系統串接的同步資料,可能放在不同資料庫甚至不同主機。盤點時逐一列出:

  • 資料庫名稱、所在主機或雲端服務、資料庫引擎與版本。
  • 每天的寫入量與尖峰時段,作為排程的依據。
  • 能接受遺失多久的資料、系統能停多久,前者決定備份間隔,後者決定還原方式。
  • 資料庫以外的必要項目:帳號與權限、設定檔、程式碼與上傳檔案。以 PostgreSQL 為例,pg_dump 一次只傾印一個資料庫,不含角色與資料表空間,要另用 pg_dumpall 處理。

備份份數與存放位置的整體配置,可以套用備份三二一原則;WordPress 網站的備份範圍與外掛操作,另見WordPress 備份要備哪些。

邏輯備份與實體備份怎麼選

MySQL 官方文件把備份分成兩類:實體備份直接複製存放資料庫內容的目錄與檔案;邏輯備份則以建立資料庫、資料表的語法與寫入資料的語法,保存結構和內容。

比較 實體備份 邏輯備份
速度 只複製檔案、不需轉換,較快 需要轉換,較慢
檔案大小 較精簡 較大,文字格式尤其明顯
可攜性 只能還原到硬體特性相同或相近的機器 和機器無關,可攜性高
常見工具 檔案系統快照、專用備份工具 mysqldump、pg_dump

MySQL 文件也指出,直接複製資料表檔案的方法不適用於含 InnoDB 資料表的資料庫,即使伺服器沒有在更新,記憶體中仍可能有尚未寫入磁碟的資料。資料量不大、需要跨主機搬移時,邏輯備份較方便;資料量大、要求還原快時,再評估實體備份,官方說明實體備份的還原比 mysqldump 這類邏輯方法快得多。

完整備份加上日誌,才能還原到指定時間點

只做每日完整備份,出事時只能回到前一次備份的時刻。要回到更接近事故的時間,需要保存完整備份之後的變更:

  • MySQL:增量備份靠二進位日誌,官方文件列為預設啟用。做完整備份時同時輪替日誌,之後的日誌檔就包含備份以來的所有變更;要做增量備份時再用 FLUSH LOGS 輪替,並把日誌檔複製到安全的地方。
  • 時間點還原:先還原完整備份,再用 mysqlbinlog 把之後的日誌事件轉成文字重新執行。mysqlbinlog 可以依事件時間或位置選取區段,只重播到出問題之前。
  • PostgreSQL:持續封存是把檔案系統層級的基礎備份和預寫式日誌(WAL)搭配,還原時先還原基礎備份,再重播封存的 WAL。官方提醒封存的 WAL 必須連續,要在做首份基礎備份之前就設定並測試封存流程,而且只能還原整個資料庫叢集。

日誌檔同樣要納入異地保存。只把完整備份送到異地、日誌留在原主機,主機故障時仍補不回中間的變更。

排程設定:時間、一致性與保留

  1. 選時間:MySQL 文件的範例把完整備份排在負載低的時段,並提醒備份必須定期排程才有用。
  2. 確保一致性:InnoDB 資料表用 mysqldump 搭配 –single-transaction,官方說明會以一致性讀取,確保備份看到的資料不變;含非交易型資料表時,備份期間這些表不能有變更。PostgreSQL 的 pg_dump 代表開始執行當下的快照,不會阻擋其他操作,需要獨佔鎖的操作除外。
  3. 減少對正式站的影響:備份造成效能問題時,MySQL 文件建議可以建立複寫,改在副本上備份。
  4. 確認結果:排程完成後檢查檔案是否產生、大小是否合理,失敗時通知負責人。
  5. 設定保留:保留多個時間點的版本,舊檔依規則清除。清除二進位日誌前要先確認,MySQL 文件提醒伺服器若是複寫來源,副本可能還沒處理完日誌內容。

備份檔加密與異地保存

邏輯備份保存的是可讀的建立語法與資料內容,備份檔外流就等於資料外流。保存時注意四件事:

  • 加密:美國網路安全暨基礎設施安全局(CISA)建議保留重要資料的離線、加密備份;加密金鑰另外存放,並指定保管人。
  • 異地:MySQL 文件的範例建議把增量備份複製到安全的地方,例如磁帶、光碟或另一台機器。CISA 也說明許多勒索軟體會設法刪除或加密可存取的備份。
  • 權限:使用專用的備份帳號,只給備份需要的權限;存放備份的雲端帳號啟用多重要素驗證。
  • 傳輸:從主機送到異地時使用加密連線,避免備份檔在途中被讀取。

雲端代管資料庫的自動備份要確認的事

雲端代管資料庫通常已開啟自動備份,但範圍與限制各家不同。以適用於 MySQL 的 Azure 資料庫彈性伺服器為例,官方說明:

  • 服務會做資料檔快照並備份交易日誌,可以還原到保留期間內的任何時間點,保留期間可以調整。
  • 時間點還原會從備份建立一台新伺服器,系統的連線設定要改指到新伺服器。
  • 這些備份檔不能匯出,只能在服務內還原;需要長期保存時,可以用 mysqldump 另做手動備份。
  • 刪除伺服器時,屬於該伺服器的備份也會一併刪除;官方另說明已刪除的伺服器資源可在刪除後短期內恢復,期限以官方頁面為準。

主機商的每日備份也要問清楚:是否包含資料庫、保留多久、還原要自己操作還是提出申請、能否只還原單一資料庫。答案決定還需不需要自己另做一份。

還原演練:照步驟實際還原一次

  1. 準備隔離環境:還原到測試主機或新的資料庫,不覆蓋正式資料。
  2. 還原完整備份:依備份工具的方式匯入,例如 PostgreSQL 的文字傾印用 psql 匯入、自訂格式用 pg_restore,目標資料庫要先建立。
  3. 補上日誌:依需要重播二進位日誌或 WAL 到指定時間點。
  4. 驗證資料:比對主要資料表的筆數、較新一筆訂單或預約的時間,讓系統連上還原後的資料庫實際登入與查詢。
  5. 記錄結果:寫下備份檔日期、還原耗時、遇到的問題與修正方式,作為事故時的操作手冊。

系統改版、資料庫升級或更換備份方式之後,建議馬上再演練一次,確認新流程能順利還原。

常見問題

資料庫備份要多久做一次?

依能接受遺失多久的資料決定。每天有訂單或預約寫入的系統,除了定期完整備份,也要保存日誌才能補回中間的變更;MySQL 文件提醒備份必須定期排程才有用。

用 mysqldump 備份時網站要停機嗎?

資料表使用 InnoDB 時,搭配 –single-transaction 可以在網站運作中做線上備份,不鎖定資料表;若含非交易型資料表,備份期間這些表不能有變更。

主機商有每日備份,還需要自己備份嗎?

要看主機商備份的範圍、保留期間與還原方式。備份不能下載、只能整台還原,或和正式資料放在同一處時,建議另做一份送到異地保存。

備份檔可以放在同一台主機嗎?

可以作為快速還原用,但不能只有這一份。主機故障、遭入侵或勒索軟體加密時,同一台主機上的備份可能一起受影響,至少要有一份在其他地點。

只備份資料庫就能還原整個系統嗎?

不行。程式碼、設定檔、上傳檔案與帳號權限也要備份;以 PostgreSQL 為例,pg_dump 不包含角色資料,要另用 pg_dumpall 保存。

本文由京采數位科技整理。我們自 2005 年起提供官網設計、系統開發與 Google SEO 服務,實際案例可見成果與案例。

想直接討論你自己的網站狀況,或需要一份初步的搜尋機會評估?

相關主題

下一步

建議先列出系統用到的資料庫、目前的備份方式與存放位置,再挑一份備份實際還原看看。京采的網頁設計服務在建置或維護官網與客製系統時,可以協助設定資料庫備份排程與日誌保存、規劃加密與異地存放、安排還原演練並寫成操作手冊,也會確認主機或雲端資料庫方案的備份限制。需要討論現況,歡迎與我們聯繫。