備份與復原

本頁內容

當你需要選定內容資料的離線副本時使用 JSON 備份。EmDash 無法匯入該檔案。復原計畫需要原始資料庫備份或時間點復原,以及媒體二進位檔案的單獨副本。

備份包含的內容

JSON 備份包括:

  • 所有內容條目,包括草稿、排程發佈和已刪除項目
  • 組成內容模型的集合和欄位定義
  • 分類法定義、術語以及指派給每個條目的術語
  • 選單和選單項目、區段、小工具區域和小工具、SEO 記錄、修訂歷程、媒體中繼資料和資料庫遷移歷程
  • 站台設定,如標題、標語、URL、語言環境、標誌、顯示偏好、社群資料和 SEO 預設值。這些來自 site:emdash:site_emdash:locale 設定群組。

它省略所有其他資料庫資料表,包括:

  • 使用者帳戶、工作階段、passkey、OAuth 資料、API 權杖和其他身分驗證資料
  • 外掛程式儲存和外掛程式設定,包括外掛程式密鑰
  • 留言和反應、重新導向和 404 記錄、作者署名、內容關係和參照、稽核記錄、速率限制和排程工作狀態
  • 媒體資料夾、媒體使用位置記錄、不完整或進行中的上傳,以及媒體檔案本身
  • 其他站台選項,包括預覽簽章密鑰和備份排程

備份是 JSON 檔案,使用與 EmDash 預覽系統相同的快照格式,以建立它們的 EmDash 版本進行版本控制。

一鍵下載

在管理面板的 Settings → Backups 中,Download backup 按鈕會產生新的備份並下載為 JSON 檔案。需要管理員角色。

下載用於檢查或自訂遷移工具。在大量匯入、架構變更或重大升級之前,使用以下選項之一建立可還原的資料庫備份。

自動備份到儲存

如果你的站台設定了儲存後端(Cloudflare 上的 R2、S3 或本地儲存),你可以啟用每日自動備份:

  1. 在管理面板中開啟 Settings → Backups

  2. 開啟 Daily automatic backups

  3. 選擇保留多少個備份(1–30)。較舊的封存會自動清理。

  4. 儲存。備份作為 EmDash 排程維護的一部分執行 — 無需額外的 cron 設定。

封存儲存在儲存桶的 backups/ 前綴下,格式為 emdash-backup-<timestamp>-<random>.json。管理面板中的 Stored Backups 清單允許你下載或刪除個別封存,Back up now 可按需建立一個。

自動備份依託於排程維護觸發(與排程發佈相同的機制)— 在 Cloudflare 上是 Worker 的 cron 觸發器,在 Node 上是內建排程器。如果你的部署未設定 cron 觸發器,請改用 Back up now 或下載按鈕。

備份和還原媒體物件

R2 和 S3 相容儲存桶除了資料庫外還需要物件層級的備份。以下 AWS CLI 範例將所有物件(包括 EmDash 的 backups/ 封存)複製到本地備份目錄。對於 AWS S3,省略 --endpoint-url

aws s3 sync s3://emdash-media ./emdash-media-backup \
  --endpoint-url https://<account-id>.r2.cloudflarestorage.com

日常備份工作使用唯讀儲存桶憑證。將備份儲存在正式帳戶或故障網域之外,並記錄同時建立的資料庫備份或 Time Travel 點。

還原到空的復原儲存桶,而不是在正式環境處理請求時覆寫它:

aws s3 sync ./emdash-media-backup s3://emdash-media-recovery \
  --endpoint-url https://<account-id>.r2.cloudflarestorage.com

僅授予還原工作對復原儲存桶的寫入權限。將非正式部署指向該儲存桶,開啟幾個已知的媒體 URL,上傳並刪除一個拋棄式檔案。僅在還原的資料庫和媒體集一起通過檢查後才切換正式繫結或儲存桶設定。

使用 Time Travel 復原 D1 資料庫

在風險操作之前,向 Time Travel 查詢目前書籤,並將其與部署或變更記錄一起記錄:

npx wrangler d1 time-travel info my-database

如果需要復原,停止對站台的寫入,並在執行破壞性還原命令之前檢查可用的還原點:

npx wrangler d1 time-travel restore my-database --timestamp=2026-07-08T13:00:00Z

Time Travel 還原整個資料庫,包括內容、使用者、設定、外掛程式資料和遷移記錄。它不還原 R2 媒體物件。命令完成後,部署與還原資料庫相符的應用程式版本,重新開放流量,並驗證登入、內容讀取、架構變更和寫入。

詳情請參閱 D1 Time Travel 文件

建立異地 D1 傾印

對於原始資料庫的完整 SQL 傾印(包括使用者和驗證資料表),使用 Wrangler:

npx wrangler d1 export my-database --remote --output=backup.sql

將 SQL 檔案與對應的應用程式版本和同時建立的媒體備份一起保管。透過將傾印匯入新設定的空 D1 資料庫、更新非正式繫結到該資料庫並驗證站台來測試復原。

使用以下命令匯入到空的復原資料庫:

npx wrangler d1 execute my-recovery-database --remote --file=backup.sql

SQLite 備份和復原

對於離線 SQLite 備份,停止所有寫入資料庫的處理程序並複製資料庫檔案。對於一致的線上備份,使用 SQLite 的備份命令:

sqlite3 emdash.db ".backup backup.db"

單獨備份本地上傳目錄或 S3 相容儲存桶。要復原,停止所有伺服器處理程序,保留損壞資料庫的副本,用經過驗證的備份取代它,還原所有需要的媒體物件,並啟動對應的應用程式版本。在重新開放流量之前驗證登入、公開內容、編輯和媒體讀取。

JSON 匯出無法還原站台

EmDash 沒有用於 JSON 還原的管理操作、API 端點或 CLI 命令。請使用上述的 D1 Time Travel、原始 D1 SQL 傾印或 SQLite 資料庫副本。