56

我在 Ubuntu 上运行 MongoDB 2.2,如果我运行:

sudo mongod

我收到一个错误,它找不到/data/db,这不是数据库所在的位置。在 mongod.conf 中,数据库路径被指定为 Ubuntu 10gen 默认值/var/lib/mongodb,即 db 所在的位置。好像mongod没有找到conf文件。所以当我运行时:

sudo mongod -f /etc/mongodb.conf

服务器启动正常,输出记录到日志文件:/var/log/mongodb/mongodb.log. 一切都很幸福。我可以切换到另一个 shell,登录 mongo shell,查看数据库并运行查询。

所以,我取消了它并尝试作为服务运行:

> sudo status mongodb
mongodb stop/waiting
> sudo start mongodb
mongodb start/running, process 10468

到目前为止看起来不错,但是 mongo 服务器没有启动。运行另一个:

> sudo status mongodb
mongodb stop/waiting
> mongo
MongoDB shell version: 2.2.0
connecting to: test
Sat Sep  1 19:07:43 Error: couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js:91
exception: connect failed

“test”不是正确的数据库,日志文件中没有任何内容。

我不知道可能出了什么问题。我检查了暴发户脚本,它们看起来不错。/etc/init/mongodb.conf运行:

mongodb --exec  /usr/bin/mongod -- --config /etc/mongodb.conf
4

10 回答 10

115

好的,这一切都归结为权限,但让我们一步一步来。当您运行sudo mongod它时,它根本不加载配置文件,它从字面上开始以默认值编译 - 端口27017, /data/db 的数据库路径等 - 这就是为什么您收到有关无法找到该文件夹​​的错误. “Ubuntu 默认值”仅在您将其指向配置文件时使用(如果您开始使用 service 命令,这将在幕后为您完成)。

接下来你像这样运行它:

sudo mongod -f /etc/mongodb.conf

如果之前没有问题,那么现在就会有 - 您已经以 root 用户身份使用正常配置(指向您通常的 dbpath 和日志)运行了该过程。这意味着现在该普通 MongoDB 文件夹中将有许多文件,用户:组为root:root.

当您再次尝试将其作为普通服务启动时,这将导致错误,因为 mongodb 用户(该服务将尝试以该用户身份运行)将无权访问这些root:root文件,最值得注意的是,它可能无法访问写入日志文件以向您提供任何信息。

因此,要将其作为普通服务运行,我们需要修复这些权限。首先,确保 MongoDB 当前没有以 root 身份运行,然后:

cd /var/log/mongodb
sudo chown -R mongodb:mongodb .
cd /var/lib/mongodb
sudo chown -R mongodb:mongodb .

这应该可以解决它(假设 user:group 是mongodb:mongodb),尽管最好用 anls -al或类似的方法进行验证以确保。完成此操作后,您应该能够使服务再次成功启动。

于 2012-09-02T01:07:57.423 回答
39

首先确认mongodb用户/组有权限写入数据目录和日志文件:

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

$ sudo chown -R mongodb:mongodb /var/log/mongodb.log

使用以下命令将 MongoDB作为守护进程(后台进程)启动:

$ mongod --fork --dbpath /var/lib/mongodb/ --smallfiles --logpath /var/log/mongodb.log --logappend

关闭 MongoDB,请输入 Mongo CLI,访问管理员并发出关闭命令:

$ ./mongo

> 使用管理员

> db.shutdownServer()

参考:http ://www.mongodb.org/display/DOCS/Starting+and+Stopping+Mongo

于 2012-10-25T22:31:42.617 回答
9

我也有同样的问题。所以我去了 cd /var/lib/mongodb/ 并删除了 mongod.lock 文件然后它对我有用。

于 2012-12-22T09:41:04.503 回答
3

按照@nelsonic 的建议检查数据、日志和日志文件夹中的所有权限后,我的问题通过授予锁定 /tmp 文件夹中的文件的权限得到解决

sudo chown mongod:mongod mongodb-27017.sock  

我将它作为 AWS Amazon Linux 实例运行。我通过以下方式以 mongod 用户身份执行,然后研究错误代码来解决这个问题。它可能对其他故障排除有用。

sudo -S -u mongod mongod -f /etc/mongod.conf
于 2017-01-13T14:59:00.327 回答
2

没有什么对我有用,然后我发现这是/tmp目录上的权限问题:

sudo chmod 1777 /tmp
sudo chown root:root /tmp
于 2016-01-06T12:03:17.890 回答
2

试试这个命令:

sudo chown mongodb /tmp/mongodb-27017.sock
于 2017-06-14T13:20:25.787 回答
1

以上答案都不适合我。我终于通过调试初始化脚本弄清楚了:

sudo bash -x /etc/init.d/mongodb start

并且看到它正在将错误的配置路径传递给 mongod。我只是将 /etc/init.d/mongodb 中的行从“CONF=/etc/mongodb.conf”更改为“CONF=/etc/mongod.conf”。版本 2 使用前者,安装版本 3 添加了新格式的 /etc/mongod.conf 但显然没有更新 init 脚本。

更新:我现在有一个更奇怪的问题,初始化脚本可以工作,但前提是我使用“sudo bash -x /etc/init.d/mongodb start”而不是“sudo service mongodb start”运行它。停止也是一样。

于 2016-08-29T05:35:51.230 回答
1

我的 mongodb 在以 mongod 用户身份从命令行启动时启动,但不是作为用户 = mongod 的服务。经过一个小时检查权限、服务定义、套接字......它是 SElinux !

在 /etc/selinux/config 我从强制切换到许可并重新启动。现在好了。

于 2018-12-03T15:34:18.420 回答
0

在上述答案都不适合我之后,删除我的日志文件使 Mongo 恢复了生机。

于 2016-10-31T04:03:52.690 回答
0

现在,如果您更新了 mongod 并且正在运行旧数据库,则可能会发生此错误。Mongod 将默认使用wiredTiger 引擎,您将拥有一个mmapv1 数据库

在 /etc/mongod.conf 中编辑引擎设置

# engine: wiredTiger
engine: mmapv1

小心 - YAML 对空格敏感

journalctl/systemd 不会看到这个问题。检查 /var/log/mongodb/mongod.log 中的 mongod 日志

我想您可以使用此处概述的步骤转换数据库

https://docs.mongodb.com/manual/tutorial/change-standalone-wiredtiger/

于 2017-05-25T18:59:29.347 回答