Jeyfin/emby数据库损坏解决办法

360次阅读
没有评论

一般数据库损坏都是由于容器中断或者升级导致的,我也是经历过一次 jellyfin 数据库损坏,打开之后发现以前的什么东西都没有,找遍全网才找到了这一份官网发布的解决办法,仅供大家参考,记得收藏万一哪天你的崩了就派上用场了。

如果您的服务器日志文件显示 SQLite 错误(如以下示例),则需要注意 library.db 文件。

SQLitePCL.pretty.SQLiteException

什么原因会导致这种情况发生

造成这种情况的典型原因是 Emby 服务器进程的突然和突然终止,例如断电、操作系统崩溃、强制终止服务器进程等。

查找数据库文件的位置

如果你不知道数据库的位置,就去服务器信息框正上方的顶部菜单里面找 View Server Info。

Jeyfin/emby 数据库损坏解决办法

点击查看服务器信息,Jellyfin 同理。

Jeyfin/emby 数据库损坏解决办法

找到数据库文件的位置。它们位于所示第一个路径下的“data”目录中。

/var/lib/emby/data 是用于以下每个解决方案的位置。

按此顺序尝试的解决方案

删除数据库锁

  1. 关闭 Emby
  2. 找到包含数据库文件的文件夹
  3. 删除 library.db-shm & library.db-wal
  4. 重新启动 Emby

检查服务器日志中是否存在 SQLite 错误,并仅在需要时继续执行下一步

检查数据库完整性并恢复数据库

此步骤将需要使用可以从 sqlite.org 下载的 SQLite 编辑器。如果您更喜欢基于图形的编辑器,您可以下载适用于大多数平台的 DB Browser for SQLite。

运行完整性检查

打开 library.db 数据库并运行以下 SQL 命令:

PRAGMA integrity_check

如果使用命令行工具,请尝试以下操作

sqlite3 library.db "PRAGMA integrity_check"

这应该返回“OK”的 integrity_check,并且没有报告任何错误。如果报告错误,我们需要恢复数据库。

恢复 library.db

我们需要做的是将数据库中的所有数据转储到文本文件中,然后将其重新加载回另一个新创建的数据库。这可以通过使用 SQLite 命令行编辑器的单个命令来完成。

  1. 运行以下命令行(这可能需要一段时间才能运行,因此请等待它完成)sqlite3 library.db ".recover" | sqlite3 library-recovered.db
  2. 我们现在将检查恢复的数据库(如上所述)的完整性 sqlite3 library-recovered.db "PRAGMA integrity_check"

这应该返回“OK”的 integrity_check,并且没有报告任何错误。如果报告错误,请在论坛中报告,然后再继续重置库数据库。如果正常且未报告错误,请继续执行步骤 3。

  1. 复制 library.db 和 library-recovered.db
  2. 将 library.db 重命名为 library.old
  3. 将 library-recovered.db 重命名为 library.db
  4. 重新启动 Emby 服务器

检查服务器日志中是否存在 SQLite 错误,并仅在需要时继续执行下一步

重置库数据库并重新加载的步骤

  1. 关闭 Emby
  2. 更改为上面找到的包含数据库文件的数据库位置
  3. 将 library.db 重命名为 library.corrupt
  4. 重新启动 Emby
  5. 运行完整库扫描
正文完
 0
评论(没有评论)
验证码