備份與還原
推薦使用 3-2-1 備份策略 來保護您的數據。 您應該保留上傳的照片/視頻副本以及 Immich 數據庫的備份以實現全面的備份解決方案。本頁提供了有關如何備份數據庫和用戶上傳的圖片和視頻位置的概述。一個可以作為 cron 任務執行的 bash 腳本範本提供在 這裡
本頁面的指南教您如何準備您的 Immich 實例進行備份,並告訴您需要備份哪些文件。您仍然需要使用實際的備份工具來自行進行備份。
數據庫
Immich 將文件路徑儲存在數據庫中,它不會掃描庫文件夾來更新數據庫,因此備份至關重要。
請參考官方的 Postgres 文件 獲取有關備份和還原 Postgres 數據庫的詳細信息。
不推薦直接備份 DB_DATA_LOCATION
文件夾。數據庫運行時這樣做可能導致備份損壞且無法還原。
自動數據庫轉存
自動數據庫轉存可以用於在 Postgres 數據庫文件損壞的情況下還原數據庫。 這些轉存沒有監控,如果失敗,您將不會收到通知。
數據庫轉存不包含任何圖片或視頻,僅包含元數據。僅在與下述的 UPLOAD_LOCATION
中的其他文件副本一起使用時才有效。
為了災難恢復目的,Immich 會自動創建數據庫轉存。轉存存儲在 UPLOAD_LOCATION/backups
。
請務必另行備份數據庫以及資產文件夾,如下所述。
您可以在 管理設置 中調整調度和保留的數據庫轉存數量。
默認情況下,Immich 將保留最近 14 次數據庫轉存,並在每天凌晨 2:00 創建一個新的轉存。
觸發轉存
您可以在 管理作業狀態頁面 上觸發數據庫轉存。
訪 問該頁面,從右上角打開“創建任務”彈窗,選擇“創建數據庫轉存”並點擊“確認”。
一個任務將運行並觸發轉存,您可以通過檢查日誌或 backups/
文件夾來驗證此操作是否成功。
此轉存將計入基於您設置保留的最近 X
次轉存。
還原
我們希望在未來版本中簡化還原操作,目前您可以在主機上的 UPLOAD_LOCATION/backups
文件夾中找到數據庫轉存。
然後請按照以下部分中的步驟還原數據庫。
手動備份與還原
- Linux 系統
- Windows 系統 (PowerShell)
docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=<DB_USERNAME> | gzip > "/path/to/backup/dump.sql.gz"
docker compose down -v # 小心!刪除所有 Immich 數據以從頭開始
## 注釋掉下一行並用您的 Postgres 路徑替換 DB_DATA_LOCATION,永久重置 Postgres 數據庫
# rm -rf DB_DATA_LOCATION # 小心!刪除所有 Immich 數據以從頭開始
docker compose pull # 更新至 Immich 的最新版本(如需)
docker compose create # 創建 Immich 應用程序的 Docker 容器但不運行
docker start immich_postgres # 啟動 Postgres 服務器
sleep 10 # 等待 Postgres 服務器啟動
# 如果與默認設置不同,請檢查數據 庫用戶
gunzip --stdout "/path/to/backup/dump.sql.gz" \
| sed "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" \
| docker exec -i immich_postgres psql --dbname=postgres --username=<DB_USERNAME> # 還原備份
docker compose up -d # 啟動其餘的 Immich 應用程序
[System.IO.File]::WriteAllLines("C:\absolute\path\to\backup\dump.sql", (docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=<DB_USERNAME>))
docker compose down -v # 小心!刪除所有 Immich 數據以從頭開始
## 注釋掉下一行並用您的 Postgres 路徑替換 DB_DATA_LOCATION,永久重置 Postgres 數據庫
# Remove-Item -Recurse -Force DB_DATA_LOCATION # 小心!刪除所有 Immich 數據以從頭開始
## 您應該在 docker-compose.yml 中將備份掛載為容器內的卷(例如:`- 'C:\path\to\backup\dump.sql:/dump.sql'`)
docker compose pull # 更新至 Immich 的最新版本(如需)
docker compose create # 創建 Immich 應用程序的 Docker 容器但不運行
docker start immich_postgres # 啟動 Postgres 服務器
sleep 10 # 等待 Postgres 服務器啟動
docker exec -it immich_postgres bash # 進入 Docker shell 並執行以下命令
# 如果備份以 `.gz` 結尾,請用 `gunzip --stdout` 替換 `cat`
cat "/dump.sql" | sed "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" | psql --dbname=postgres --username=<DB_USERNAME>
exit # 退出 Docker shell
docker compose up -d # 啟動其餘的 Immich 應用程序
請注意,數據庫還原需要全新安裝(即創建 Docker 容器後,Immich 服務器尚未運行)。如果 Immich 應用程序運行過,還原數據庫時可能會遇到 Postgres 衝突(關係已存在、違反外鍵約束、多個主鍵等),此時需要刪除 DB_DATA_LOCATION
文件夾以重置數據庫。
某些部署方法使得啟動數據庫而不啟動服務器變得困難。在這些情況下,您可以在啟動服務之前設置環境變量 DB_SKIP_MIGRATIONS=true
。這將防止服務器運行干擾還原過程的遷移。請在數據庫還原後移除此變量並重新啟動服務。
文件系統
Immich 將兩種類型的內容儲存於文件系統中:(a)原始的未修改資產(照片和視頻)和(b)生成的內容。我們建議備份 UPLOAD_LOCATION
的所有內容,但只有原始內容是關鍵的,這些內容儲存在以下文件夾中:
UPLOAD_LOCATION/library
UPLOAD_LOCATION/upload
UPLOAD_LOCATION/profile
如果您選擇僅備份這些文件夾,那麼在從備份還原後,您需要重新運行所有資產的轉碼和縮略圖生成任務。
如果您已將這些文件夾中的某些內容移動到其他存儲設備(例如 profile/
),請確保調整備份路徑以匹配您的設置。
資產類型及儲存位置
一些存儲位置受存儲範本影響。詳情見下方。
- 關閉存儲範本(默認)。
- 啟用存儲範本
UPLOAD_LOCATION/library
文件夾在新運行 1.92.0 版的機器上默認未使用。僅當系統管理員啟用存儲範本引擎時才使用,
更多信息請閱讀 發布說明。
1. 用戶特定文件夾:
- 每個用戶都有一個唯一的字串代表自身。
- 您可以在帳號設置 -> 帳號 -> 用戶 ID 中找到您的用戶 ID。
2. 資產類型及儲存位置:
-
原始資產:
- 通過瀏覽器界面、移動設備和 CLI 上傳的原始資產。
- 儲存在
UPLOAD_LOCATION/upload/<userID>
。
-
頭像圖片:
- 用戶頭像圖片。
- 儲存在
UPLOAD_LOCATION/profile/<userID>
。
-
縮略圖圖片:
- 每個資產的小縮略圖和大預覽圖的預覽圖片,以及已識別人臉的縮略圖。
- 儲存在
UPLOAD_LOCATION/thumbs/<userID>
。
-
已編碼資產:
- 為更廣泛的兼容性重新編碼的視頻。原始視頻不會被刪除。
- 儲存在
UPLOAD_LOCATION/encoded-video/<userID>
。
-
Postgres
- Immich 數據庫包含所有信息,以確保系統正常運行。 注意: 此文件夾僅對於那些完成 v1.102.0 中提到更改的用戶(非強制性可選更改)或開始於此版本的用戶可見。
- 儲存在
DB_DATA_LOCATION
。
危险備份此文件夾並不等同於備份您的數據庫! 請按照 這裡 提供的指導學習如何正確備份。
如果你選擇啟用存儲範本引擎,它將把所有資產移到 UPLOAD_LOCATION/library/<userID>
。
當你關閉存儲範本引擎時,它會將資產留在 UPLOAD_LOCATION/library/<userID>
,而不會將其移回 UPLOAD_LOCATION/upload
。
新資產 將儲存到 UPLOAD_LOCATION/upload
。
1. 用戶特定文件夾:
- 每個用戶都有一個唯一的字串代表自身。
- 管理員可以為用戶設置存儲標籤,此標籤將取代
<userID>
用於library/
資料夾。 - 管理員的預設存儲標籤為
admin
。
- 管理員可以為用戶設置存儲標籤,此標籤將取代
- 您可以在帳戶設置 -> 帳戶 -> 用戶ID中找到您的用戶ID和存儲標籤。
2. 資產類型與存儲位置:
-
源資產:
- 通過瀏覽器介面、行動裝置和CLI上傳的原始資產。
- 存儲在
UPLOAD_LOCATION/library/<userID>
。
-
頭像圖片:
- 用戶個人資料圖片。
- 存儲在
UPLOAD_LOCATION/profile/<userID>
。
-
縮略圖圖片:
- 每個資產的預覽圖片(模糊、小、大)以及辨識到臉部的縮略圖。
- 存儲在
UPLOAD_LOCATION/thumbs/<userID>
。
-
編碼資產:
- 從原始檔案重新編碼的影片以提高兼容性。原始檔案不會刪除。
- 存儲在
UPLOAD_LOCATION/encoded-video/<userID>
。
-
上傳佇列中的檔案(行動裝置):
- 通過行動應用程式上傳的檔案。
- 暫時儲存在
UPLOAD_LOCATION/upload/<userID>
。 - 成功上傳後移至
UPLOAD_LOCATION/library/<userID>
。
-
Postgres
- Immich 資料庫包含所有確保系統正常運作的資訊。 注意: 此資料夾僅對已執行 v1.102.0 所述變更(可選,非 強制性變更)或從該版本開始的用戶可見。
- 存儲在
DB_DATA_LOCATION
。
危险此資料夾的備份並不構成資料庫的備份! 請按照 此處 列出的說明進行正確的備份。
請勿在任何情況下觸碰這些資料夾內的檔案,除了備份目的。更改或刪除資產可能導致未追蹤或缺失的檔案。 您可以將其視為一個必須小心處理的應用程式,對資產的檢視、修改和刪除僅能通過行動裝置或瀏覽器介面進行。
備份順序
Immich 的備份應包含資料庫和資產檔案。在備份時,這些可能會不同步,從而在還原後可能導致資產損壞。 解決此問題的最佳方法是,在進行備份時停止 immich-server 容器。如果不會發生變更,備份將始終保持同步。
如果無法停止容器,則建議先備份資料庫,然後備份檔案系統。這樣做的最壞情況是檔案系統中有資料庫未知的檔案。如有必要,這些檔案可在還原後手動(重新)上傳。如果備份順序顛倒,先備份檔案系統再備份資料庫,則可能還原的資料庫參考了不在檔案系統備份中的檔案,從而導致資產損壞。