備份與還原 - MiCat-S/Mi302 GitHub Wiki

繁體中文 | 简体中文 | English

Mi302 每天自動備份資料庫和設定檔。這一頁說明備份了什麼、放在哪裡、怎麼手動備份和下載,以及怎麼還原。

備份了什麼

每次備份產生兩個檔案,檔名裡的時間相同:

檔案 內容
mi302-年月日-時分秒.db 資料庫 library.db 的完整複本
mi302-年月日-時分秒.yaml 設定檔 config.yaml 的複本

例如 mi302-20260927-031500.db 和 mi302-20260927-031500.yaml。

資料庫裡有:

  • 使用者帳號、密碼雜湊,以及播放器的登入狀態。
  • 觀看紀錄、播放進度、我的最愛。
  • 115 登入狀態:cookie 和 115 開放平台的 token。
  • 網頁上建立的 API 金鑰。
  • 115 同步的對照表和進度。
  • 媒體資訊、演職人員和他們的中文名、學到的片頭片尾。
  • 媒體庫的項目,以及伺服器 ID(播放器靠它認得這台伺服器)。

不在備份裡的:

  • 上傳的媒體庫封面(data/images/)。
  • 日誌(data/logs/)。
  • 媒體資料夾裡的東西:strm、nfo、海報、字幕、X-mediainfo.json。strm 可以用全量同步重新產生,刮削出來的 nfo 和海報要自己另外備份。

放在哪裡

備份放在資料資料夾(server.data_dir)底下的 backups:

安裝方式 位置
一鍵安裝(Linux) /opt/mi302/config/data/backups
一鍵安裝(macOS) ~/Mi302/config/data/backups
手動用 Python 啟動 Mi302 的資料夾底下的 data/backups

實際位置顯示在「設定」→「備份」卡片上。

自動備份

  • Mi302 啟動後先檢查一次,之後每小時檢查一次,距離上次備份滿 24 小時就備份一份。所以第一次啟動後馬上就有第一份。
  • 備份時不必停止 Mi302。它用 SQLite 的線上備份,還沒寫回主檔的資料也包含在內。
  • 備份出來的資料庫如果缺少必要的資料表,就不保存,免得用壞掉的備份把舊的好備份擠掉。
  • 自動備份失敗時,日誌裡會記「自動備份失敗」和原因。

保留幾份

「設定」→「備份」的「保留幾份」(server.backup_keep)預設 7,可以填 0 到 90,改完按頁面下方的「儲存設定」。

  • 每次備份完,只留最新的幾份,較舊的 .db 和 .yaml 一起刪掉。改小之後,多出來的在下一次備份時刪除。
  • 填 0 就不自動備份。仍然可以手動備份,手動的備份留最新 7 份。

手動備份與下載

在「設定」→「備份」卡片:

  • 按「立即備份」馬上備份一份,完成後顯示「已備份:」和檔名。
  • 下面的清單列出每份備份的時間、檔名、大小,有設定檔的標「含設定檔」。
  • 按下載圖示下載資料庫;按「yaml」下載同一時間的設定檔。

只有管理員登入後才能備份和下載,API 金鑰不行。也可以直接從上面的資料夾複製檔案。

還原

  1. 停止 Mi302。
  2. 把 data 資料夾裡的 library.db 換成要還原的 .db,並刪掉 library.db-wal、library.db-shm。
  3. 需要的話,把同一時間的 .yaml 換成 config.yaml。
  4. 啟動 Mi302。

Linux 上用一鍵安裝的例子(把檔名換成你要還原的那份):

mi302 stop
cd /opt/mi302/config
mkdir -p data/before-restore
mv data/library.db* data/before-restore/     # 現在的資料庫先移到旁邊,也順便移走 -wal、-shm
cp data/backups/mi302-20260927-031500.db data/library.db
cp data/backups/mi302-20260927-031500.yaml config.yaml   # 要連設定一起還原時才做
mi302 start
  • macOS 用一鍵安裝的,把 /opt/mi302/config 換成 ~/Mi302/config。
  • 手動用 Python 的,先停掉 Mi302(在執行的終端機按 Ctrl+C,或 sudo systemctl stop mi302),data 和 config.yaml 在你啟動 Mi302 的資料夾。
  • 這些檔案屬於執行 Mi302 的帳號。請用那個帳號操作;用 sudo 複製的話,之後要把擁有者改回來,例如 sudo chown 帳號 data/library.db config.yaml,不然 Mi302 寫不進去。
  • 資料庫、備份和設定檔只有執行 Mi302 的帳號讀得到(權限 600):裡面有 115 的登入狀態和密碼。別的帳號要讀,自己用 sudo。

還原之後:

  • 帳號、密碼、觀看紀錄和 115 登入都回到備份時的狀態,備份之後的觀看紀錄會不見。
  • 如果備份裡的 115 登入已經失效(例如被同類型的其他登入踢掉),重新掃碼登入。
  • 115 同步從備份時的進度繼續:下一次增量同步讀那之後的生活事件;隔太久、事件已經超出 115 保留的範圍時,自動改跑全量。
  • 還原設定檔的話,媒體庫、同步任務和其他設定也回到備份時的樣子。

安全

備份裡有敏感資料,請當成密碼保管,不要傳給別人或放到公開的地方:

  • .db 裡有 115 的登入 cookie,拿到的人可以用你的 115 帳號。另外還有密碼雜湊、播放器的登入 token 和 API 金鑰。
  • .yaml 是設定檔的複本,可能有明碼:users 底下的密碼、MoviePilot 的密碼和 API 令牌、p115.cookies、api_keys。

下載到自己電腦的備份用完就刪掉。設定檔裡哪些資料是明碼,見設定檔參考。