备份并恢复 Mealie 菜谱与站点数据

Mealie 内置了数据库备份与恢复入口。真正要为整个站点留出退路时,还应区分“在管理页导出数据库”和“保存部署的数据目录”:使用 SQLite 的实例,其容器内 /app/data/ 目录保存全部数据,官方建议停止容器后备份整个目录。本文依照 Mealie 官方《Backups and Restores》整理,补充恢复前后的检查步骤。

原文:Mealie 官方文档;作者归属:Mealie 项目文档团队。原文未注明首次发表日期。本文核验日期为 2026 年 10 月 5 日。

Mealie 备份与恢复流程:先独立保存目标状态;SQLite 停容器备份数据目录;恢复前检查版本并上传备份;PostgreSQL 恢复后撤销临时超级用户权限;最后登录并检查数据。
原创技术示意图,依据官方文档绘制;不是界面截图或实测记录。

找到备份入口,先把备份带离实例

在 Mealie 中依次进入 Settings → Admin Settings → Backups。也可以在自己的实例地址后添加 /admin/backups 直接访问。此页面可查看已有备份,创建备份、上传备份、下载备份、删除备份以及执行恢复;删除备份需要确认。

日常备份可以从这里创建,并下载保存在实例之外。页面中看得到一个备份,只能说明实例当前还持有这个文件;如果实例所在的磁盘损坏,它未必能成为独立的恢复来源。因此,下载后保留独立副本、注明实例版本和生成时间,是本文的编辑补充建议。

SQLite:停止容器后备份整个数据目录

官方文档明确说明:使用 SQLite 时,所有数据均位于容器内的 /app/data/ 目录。停止容器后,用自己采用的备份工具保存这个目录,可完成整个站点的备份;官方将这称为备份数据的最佳方式。

这里的路径是容器内部路径。在实际部署中,应先核对它对应的宿主机绑定目录或 Docker 卷,再决定如何保存。不能因为知道了容器路径,就假定宿主机存在同名目录。本文不提供未核对部署配置的复制或删除命令,也未停止任何容器。

这一路径与 PostgreSQL 部署不同。不要把“复制 /app/data/ 即覆盖 SQLite 全部数据”的结论,直接套用于外置 PostgreSQL 数据库。无论采用哪一种备份方式,在恢复前另行保存目标实例当前状态,才能在选错备份或遇到兼容问题时保留排查材料。

上传备份,再执行恢复

备份必须已经上传到要恢复的实例,才能导入。在备份页面左上方点击上传按钮,选择需要恢复的备份文件;上传完成并出现在列表后,再执行导入。如果列表里已有所需备份,也可以直接选择它。

恢复是破坏性操作:它会删除数据库中现有的全部数据,而且不能撤销。 执行之前,应确认目标实例无误,备份文件可用,并已另外保存当前状态。本文只说明操作流程,没有执行导入、删除数据库、提权或容器重启。

还要核对备份与实例的版本。官方对历史版本给出过特别警告:在 beta-v5 之前,使用不匹配的数据库备份可能导致实例无法使用,需要清除全部数据后重新安装;在 beta-v5 之后,不匹配的恢复会报错并提示用户。这是原文对历史行为的说明,不意味着当前任意两个版本的备份都能互相恢复。版本匹配应在操作前确认,不能以一次恢复尝试代替兼容性判断。

PostgreSQL:临时提权与撤权是一组动作

官方文档说明,PostgreSQL 恢复过程中需要大量删除数据,并临时设置角色,因此 Mealie 所使用的数据库账户在恢复时需要超级用户权限。下面保留原文的 SQL 逻辑;mealie 是示例账户名,实际操作前必须确认对应账户与数据库实例。

-- 仅供已确认目标与备份的管理员参考;本文没有执行。
-- 临时提升 Mealie 数据库账户权限:
ALTER USER mealie WITH SUPERUSER;

-- 此时在 Mealie 管理页执行恢复。

-- 恢复结束后撤销超级用户权限:
ALTER USER mealie WITH NOSUPERUSER;

这段 SQL 不能当作“永久修复权限问题”的配置。超级用户权限远超应用日常需求;恢复流程中应事先安排撤权步骤,即使恢复失败,也应在完成必要排查后确认权限已回到预期状态。原文相关背景可见 GitHub issue #1500。

恢复后重新登录,并区分登录问题与数据问题

恢复成功后,Mealie 会让当前用户退出登录。需要重新登录才能完成恢复。如果无法登录,但界面并未显示 Invalid credentials 错误,官方建议重启 Mealie 容器后再试。这个建议针对特定症状;如果已经明确提示凭据错误,应先核对恢复后的账户与密码,不能把重启理解成通用的身份验证修复办法。

重新登录后,应检查菜谱和重要站点内容是否符合所选备份的时间点。可以挑选有代表性的菜谱、图片及购物清单核对,并查看恢复日志。这些验收步骤是本文的编辑补充,不代表官方承诺每类数据在所有版本中都具有相同的恢复行为。

失败时从日志缩小范围

如果恢复没有成功,先阅读日志,找出失败对象。官方给出的一条排查路径是:下载备份 ZIP,查看其中的 database.json,在副本上修改可能导致失败的内容,再尝试恢复。例如,日志指出 shopping-list 恢复失败时,可以移除该列表的内容,以便尝试恢复其他部分。需要帮助时,可通过 Mealie 社区 Discord 寻求支持。

编辑备份会改变准备恢复的数据,也可能造成部分数据缺失。 应保留原始 ZIP,只编辑副本,并记录删除或修改了哪些对象。删除出错对象只是原文提供的潜在排错办法,不保证修复成功,更不能把“可以登录”当作全部数据完整的证据。

本文对管理页面操作和 SQL 只做了静态核对。未发现示例包含硬编码秘密或字符串拼接注入入口;主要风险是恢复删除数据,以及临时数据库超级用户权限。如果要真正执行,应先在匹配版本的隔离实例中验证备份,再安排生产恢复。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容