InvokeAI 数据库与生成图片数据怎么备份、定时清理与恢复
2026/9/13 16:57:46 网站建设 项目流程

InvokeAI 数据库与生成图片数据怎么备份、定时清理与恢复

【免费下载链接】InvokeAIInvoke is a leading creative engine for Stable Diffusion models, empowering professionals, artists, and enthusiasts to generate and create visual media using the latest AI-driven technologies. The solution offers an industry leading WebUI, and serves as the foundation for multiple commercial products.项目地址: https://gitcode.com/GitHub_Trending/in/InvokeAI

自托管的 InvokeAI 实例有两类数据需要在备份和恢复时覆盖:SQLite 数据库文件databases/invokeai.db(画廊记录、boards、模型记录、用户与app_settings等)和生成媒体文件(图片在outputs/下,图片文件位于outputs/images/,视频位于outputs/videos/)。本文基于 多用户管理指南 的 Backup and Recovery 与 Troubleshooting 章节,以及 YAML 配置文档,给出一次完整的手动备份、文档提供的定时备份 + 保留清理脚本、生成图片数据的清理方式,以及从备份恢复的操作路径。

前提条件(均来自文档):

  • InvokeAI 已安装并可运行,你能在命令行访问服务器文件系统;
  • 你确定自己的 InvokeAI 根目录(下称INVOKE_ROOT)——即存放invokeai.yaml的目录。InvokeAI 按以下顺序解析根目录:--root <path>命令行参数、INVOKEAI_ROOT环境变量、当前激活虚拟环境所在目录、回退到主目录下的invokeai目录;
  • 后续所有命令中的INVOKE_ROOT均替换为你的实际根目录路径。

根目录的标准布局(文档中的目录树):

models/ outputs/ databases/ workflow_thumbnails/ style_presets/ nodes/ configs/ invokeai.example.yaml invokeai.yaml

手动备份:先停服,再复制

文档给出的手动备份步骤明确要求先停止 InvokeAI,再复制数据库文件:

# Stop InvokeAI # Copy database file cd INVOKE_ROOT cp databases/invokeai.db databases/invokeai.db.$(date +%Y%m%d) # Or create compressed backup tar -czf invokeai_backup_$(date +%Y%m%d).tar.gz databases/

两种形式任选其一:cp生成按日期命名的裸数据库副本;tar把整个databases/目录压缩归档。文档在启用多用户模式等变更前的迁移流程里也用了同样的保护手法(cp databases/invokeai.db databases/invokeai.db.backup),说明这是官方推荐的变更前置动作。

生成图片数据不在上面这条命令的范围内。文档的 Disaster Recovery 一节列出了完整系统备份应包含的内容:

  • databases/— 所有数据库文件
  • models/— 已安装模型(如果本地存储)
  • outputs/— 生成的图片
  • invokeai.yaml— 配置文件
  • 任何自定义脚本或修改

按同样的 tar 模式(示例,目录换为outputs/):

cd INVOKE_ROOT tar -czf invokeai_outputs_$(date +%Y%m%d).tar.gz outputs/

注意outputs/可能很大,备份频率和存放位置由你自己决定,文档只给出了应包含的范围。

定时备份与自动清理:文档提供的脚本 + cron

文档给出了一个自动备份脚本backup_invokeai.sh,其中包含一条保留 30 天的自动清理规则(删除 30 天前的旧备份数据库文件)。脚本会执行mkdir -pfind ... -delete,副作用是删除$BACKUP_DIR中符合invokeai_*.db且修改时间超过 30 天的文件——这只清理备份文件本身,不动生产数据库和生成图片:

#!/bin/bash # backup_invokeai.sh INVOKE_ROOT="/path/to/invoke_root" # 替换为你的 InvokeAI 根目录 BACKUP_DIR="/path/to/backups" # 替换为你的备份存放目录 DB_PATH="$INVOKE_ROOT/databases/invokeai.db" DATE=$(date +%Y%m%d_%H%M%S) # Create backup directory mkdir -p "$BACKUP_DIR" # Copy database cp "$DB_PATH" "$BACKUP_DIR/invokeai_$DATE.db" # Keep only last 30 days find "$BACKUP_DIR" -name "invokeai_*.db" -mtime +30 -delete echo "Backup completed: invokeai_$DATE.db"

crontab -e加入每日 2 点执行的条目(脚本路径替换为实际位置):

# Add daily backup at 2 AM 0 2 * * * /path/to/backup_invokeai.sh

两点适用说明:

  • 文档的手动备份步骤要求先停止 InvokeAI,而自动脚本没有停止步骤;文档的故障排查章节把“备份进程正在访问数据库”列为 “Database is locked” 错误的原因之一,因此该脚本更适合在负载较低的时间窗运行,或者由你自行在调度里先停服。
  • 这个定时任务只备份数据库。生成图片(outputs/)的定期归档不在文档给出的定时任务里,需要按上一节的 tar 方式自行安排。

生成图片数据的清理

文档没有提供“按计划自动删除旧生成图片”的机制,它描述的图片数据清理是以下几种:

  1. 通过画廊删除:在 Gallery 面板 中,单张图片右键Delete Image会永久删除;Clear Intermediates清理中间产物;删除 board 时Delete Board and Assets才会连图片视频一起永久删除(Delete Board Only只删 board、内容移入 Uncategorized,不能撤销的只有后者)。删除是“先删数据库记录、再删文件”并带日志(journal)保护:如果文件删不掉,条目会保留在画廊而不是被留在磁盘上形成孤儿文件。
  2. 孤儿文件清理脚本:删除用户后,outputs/imagesoutputs/videos中的物理媒体文件会原地保留;文档说明孤儿图片文件可以用 gallery maintenance script 清除,视频文件应通过画廊删除(会连带记录一起删)或手动清理。仓库中对应的脚本入口是 gallery_maintenance.py,其用途为:删除画廊目录中的孤儿图片、删除对应文件已不存在的孤儿数据库条目、重新生成缺失的缩略图。运行它会实际删除文件,请先确认它识别出的孤儿范围。
  3. 备份文件的定时清理:即上一节脚本中find ... -mtime +30 -delete保留 30 天的规则。这是文档中唯一展示“定时”性质的清理动作,且对象是备份文件而非生成图片。

从备份恢复

文档给出的数据库恢复步骤:先停服,保留当前数据库,用备份覆盖,再启动:

# Stop InvokeAI # Replace current database with backup cd INVOKE_ROOT cp databases/invokeai.db databases/invokeai.db.old # Save current cp databases/invokeai_backup.db databases/invokeai.db # 替换为你的实际备份文件名 # Restart InvokeAI invokeai-web

注意第二条cp的源文件名invokeai_backup.db是文档示例,需替换为你实际备份产生的文件名(如databases/invokeai.db.20260912或备份目录里的invokeai_20260912_020000.db)。

文档同时给出了验证与排查手段:

  • 启动并测试:完整系统恢复流程的最后一步就是 “Start InvokeAI and test”——用备份恢复后的实例实际走一遍操作。

  • 检查数据库内容可读(来自 Troubleshooting 的账号检查命令,可换成你要核对的表):

    sqlite3 databases/invokeai.db "SELECT * FROM users WHERE email = 'admin@example.com';"
  • “Database is locked” 报错时,用fuser databases/invokeai.db检查是否有其他进程(例如备份进程)占用;文档给出的另一选项是切到 WAL 模式:

    sqlite3 databases/invokeai.db "PRAGMA journal_mode=WAL;"
  • 升级导致迁移失败时,恢复备份后用invokeai-web --log-level DEBUG重新执行迁移以获取详细日志。

整机灾难恢复

文档给出的完整系统恢复流程(适用于根目录整体丢失或更换机器的情况):

  1. 在新系统安装 InvokeAI
  2. 恢复配置文件invokeai.yaml
  3. 恢复databases/目录
  4. 恢复models/outputs/
  5. 验证文件权限
  6. 启动 InvokeAI 并测试

限制

  • 文档没有提供自动删除或归档旧生成图片的定时任务;outputs/的定时备份需要你按 Disaster Recovery 清单自行安排。
  • 恢复的结果是备份文件对应时刻的数据状态,文档没有描述合并或增量恢复方式。
  • 数据库为单文件 SQLite,停服复制是最稳妥的备份姿态;文档只把“备份进程访问数据库”作为锁错误的可能原因列出,未提供在线热备方案。
  • 更多备份、密钥管理与多用户安全细节见 多用户管理指南,目录与配置项说明见 YAML 配置文档。

【免费下载链接】InvokeAIInvoke is a leading creative engine for Stable Diffusion models, empowering professionals, artists, and enthusiasts to generate and create visual media using the latest AI-driven technologies. The solution offers an industry leading WebUI, and serves as the foundation for multiple commercial products.项目地址: https://gitcode.com/GitHub_Trending/in/InvokeAI

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询