{% hint style="success" %} 对应的官方页面地址 {% endhint %}
{% hint style="warning" %}
WAL 是专用于 SQLite 的设置,它在 Postgres 或 MySQL 上不起作用;如果您使用这些后端之一,则 ENABLE_DB_WAL
配置选项无效。
{% endhint %}
默认情况下,vaultwarden
在启动期间将尝试为数据库启用 WAL。添加此功能可以提高性能,并且在某些情况下有助于避免请求失败。
一般而言,除非您相当确定需要关闭 WAL,否则应将其保持为启用状态。但是,可能有一些情况需要将其关闭,比如:
- 某些文件系统不支持 WAL(对于网络文件系统尤其如此)。如果您使用的是这样的文件系统,该服务将无法启动并显示
Failed to turn on WAL
错误。 - (要启用 WAL)数据库要求 sqlite 的版本为
3.7.0
或更高,因此,出于某种原因(例如备份)您需要使用无法更新的低版本工具来直接访问数据库,此时也需要禁用 WAL。 - 某个这里描述的缺陷也会影响您(不得不禁用 WAL)。
这些更改通常是安全的,可以顺利完成并且不会丢失数据,但是强烈建议在进行任何更改之前备份您的数据。
如果您使用启用了 WAL 的低版本数据库,则需要使用 sqlite 来禁用它:
1)停止 vaultwarden
2)定位您的数据文件夹。除非您指定了其他名称,否则这里通常会有一个名为 db.sqlite3
的文件。
3)使用 sqlite 打开此文件:
sqlite3 db.sqlite3
4)键入 PRAGMA journal_mode=delete;
并按 Enter,以禁用 WAL:
sqlite> PRAGMA journal_mode=delete;
delete
5)键入 .quit
并按回车退出 sqlite 实用程序(注意前面的点)。
要关闭 WAL,您需要通过将 ENABLE_DB_WAL
变量的值设置为 false
来启动 vaultwarden
。
docker run -d --name vaultwarden \
-e ENABLE_DB_WAL=false \
-v /vw-data/:/data/ \
-p 80:80 \
vaultwarden/server:latest
确保在启动前始终使用了此变量,否则一旦没有此变量将会再次启用 WAL(如果发生这种情况,请从第 1 步开始再次禁用它)。
通常来说,只要您在未将 ENABLE_DB_WAL
变量的值设置为 false
的情况下启动 vaultwarden
,服务器将自动为您启用 WAL。您可以通过运行以下命令进行验证:
sqlite3 db.sqlite3 'PRAGMA journal_mode'
db.sqlite3
是 vaultwarden
所使用的数据库文件。此命令将报告当前使用的模式,在我们的例子中将返回 wal
。如果已禁用 WAL,默认通常返回 delete
。