执行时
我的主目录中 sudo arangod
或sudo service arangodb start
我收到以下消息
[2844] FATAL cannot start server: database directory is locked
[2867] FATAL cannot start server: database directory is locked
如何解决此错误?
答案 0 :(得分:4)
通常,ArangoDB在启动时在数据库目录中创建一个锁文件,以确保没有两个 arangod 进程同时在同一个数据库目录上工作(最有可能位于/var/lib/arangodb/
)。
看到上述错误可能有不同的原因:
有可能另一个ArangoDB实例仍在运行,它使用相同的数据库目录。在这种情况下,错误消息和拒绝启动是正确的。您可以通过发出arangod
之类的命令来尝试了解其他正在运行的ps fax | grep arangod
进程。
如果没有运行ArangoDB,如果ArangoDB的数据库目录中有一个名为LOCK
的文件,启动arangod
进程无法读取或写入,则可能仍会出现错误。在这种情况下,启动也将被拒绝。这可能是一个特权问题,但如果您通过sudo
运行命令,则不太可能。
最后一种可能性是文件flock()
上的LOCK
调用因任何原因失败。在这种情况下,操作系统无法保证文件仅为刚刚启动的arangod
进程锁定。这不会阻止其他arangod
进程尝试并行使用相同的数据库目录,这将是不安全的。所以在这种情况下,服务器也会拒绝启动。顺便说一句,flock
可能不会在所有文件系统上实现,因为它可能难以在分布式fs中实现。它应该适用于本地文件系统。
如果您100%确定没有其他arangod
实例正在运行,LOCK
文件没有文件权限问题且错误仍然存在,您可以尝试删除LOCK
手动从数据库目录中获取文件并启动服务器。