无法启动mongodb服务:/data/db not found

Posted

技术标签:

【中文标题】无法启动mongodb服务:/data/db not found【英文标题】:Cannot start mongodb service: /data/db not found 【发布时间】:2018-04-19 00:01:01 【问题描述】:

我在 openSUSE Tumbleweed 上使用 MongoDB 3.6.2。今天当我尝试打开 mongo shell 时出现连接错误。当我使用

检查 mongodb.service 的状态时
sudo systemctl status mongodb

它显示了

Active: failed

没有太多有用的信息。然后我检查了

sudo mongod --repair

我发现以下错误:

STORAGE  [initandlisten] exception in initAndListen: NonExistentPath: Data directory /data/db not found., terminating

于是我去查看了我的 /etc/mongodb.conf 文件,存储部分如下所示:

# Where and how to store data.
storage:
  dbPath: /var/lib/mongodb
  journal:
    enabled: true
#  engine: mmapv1
#  mmapv1:
#  wiredTiger: true

网络部分如下所示:

net:
  port: 27017
  bindIp: 127.0.0.1,::1
  ipv6: true

此文件的其他部分不太可能导致此错误,因此我省略了它们。

我认为我的机器上没有打开 ipv6,但这也不应该导致错误,因为我尝试设置

ipv6: false

还是不行。

问题是,我通常将 mongodb 作为服务,并通过

使其在启动时自动启动
sudo systemctl start mongodb
sudo systemctl enable mongodb

直到今天,这一切都很好。但是,当我手动运行时

sudo mongod --dbpath /var/lib/mongodb --port 27017

它工作正常。所以似乎 mongodb 仍然无法识别新的 dbpath /var/lib/mongodb。我确实跑了

sudo mongod --config /etc/mongodb.conf

但看起来这没有帮助。

请指教。我每次都必须手动指定 --dbpath 吗?我可以继续使用 .conf 文件将 mongodb 作为服务运行吗?

提前致谢。

【问题讨论】:

检查你正在运行的进程ps -ef | grep mongod。这实际上是否显示mongod --config /etc/mongodb.conf 或其他内容?您可能还应该检查日志。除非您更改了其他内容,否则默认配置可能会将其放在 /var/log/mongodb/mongod.log 中。 BTW sudo mongod --repair 失败是因为您没有使用--dbpath,但如果您直接使用--dbpath 成功启动实例,您可能不需要修复。 【参考方案1】:

已解决:

事实证明,ipv6 设置实际上很重要。我将/etc/mongodb.conf 文件更改为:

# What type of connections to allow.
net:
  port: 27017
  bindIp: 127.0.0.1
  ipv6: false

然后

sudo mongod --config /etc/mongodb.conf

完成此操作后,我尝试再次启动该服务,但遇到了同样的错误。我去查看位于/var/log/mongodb/mongod.log的日志,发现如下错误:

2018-04-18T21:02:36.561-0400 E STORAGE  [initandlisten] WiredTiger error (13) [1524099756:561216][4061:0x7f107fa1b9c0], file:WiredTiger.wt, connection: /var/lib/mongodb/WiredTiger.turtle: handle-open: open: Permission denied
2018-04-18T21:02:36.561-0400 E -        [initandlisten] Assertion: 28595:13: Permission denied src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp 413
2018-04-18T21:02:36.562-0400 I STORAGE  [initandlisten] exception in initAndListen: Location28595: 13: Permission denied, terminating

所以我这样做了:

sudo chown -R mongodb:mongodb /var/lib/mongodb/

然后我使用

启动服务
sudo systemctl start mongodb

它开始正确!

所以解决办法是:

    中删除,::1
    net:
      port: 27017
      bindIp: 127.0.0.1,::1
      ipv6: false
    

并确保 ipv6: false 因为 ipv6 在我的机器上被禁用。

    确保您拥有数据路径的正确权限,在我的例子中是/var/lib/mongodb

谢谢。

【讨论】:

以上是关于无法启动mongodb服务:/data/db not found的主要内容,如果未能解决你的问题,请参考以下文章

将mongodb作为Windows10的系统服务来启动

安装mongodb后服务启动不了请问怎么解决

Mac下安装mongdb

mongodb

MongoDB学习笔记:分片

MongoDB 通过配置文件启动及注册服务