在Ubuntu上,只有以root身份运行时MongoDB才能正常工作——数据目录问题

39

我使用官方包(mongodb-stable)安装了MongoDB,遵循了包括以下内容的快速入门指南:Ubuntu和Debian软件包Unix快速入门指南

By default MongoDB will store data in /data/db, but it won't automatically create that directory. To create it, do:

$ sudo mkdir -p /data/db/
$ sudo chown `id -u` /data/db

You can also tell MongoDB to use a different data directory, with the --dbpath option.

如果我只运行mongod,就会出现错误,只有当我运行sudo mongod时,MongoDB 才会启动:

Mon Mar 14 15:27:07 [initandlisten] couldn't open /data/db/test.ns errno:13 Permission denied
Mon Mar 14 15:27:07 [initandlisten]   couldn't open file /data/db/test.ns terminating
Mon Mar 14 15:27:07 dbexit:

怎么回事?


6
希望所有问题都能像这样被问得这么好。 - Brandon Henry
2个回答

75

由于你是以root用户创建了/data/db,所以它的权限是这样设置的。你可以将其权限更改为你的用户帐户,或者任何你正在运行Mongo的帐户。

chown -R username /data/db

或者/data

你也可以设置一个分组

chown -R username.groupname

-R 会递归地执行操作,因此它将影响您已经以 root 用户身份创建的所有运行 mongoDB 的文件。


2
将所有者保留为root并仅分配组是否有任何好处?还是最好将所有者明确设置为用户? - Emmanuel M. Smith
3
谢谢,我把目录的所有权从我的用户名:我的组改成了mongodb:mongodb。 - Aaron
1
请记住,在运行“ chown -R username /data/db” 命令之前,您可能需要在其前面加上“ sudo”。 - Mathias Haugsbø

1

我在2021年的RHEL 8上遇到了同样的问题。

我可以使用sudo权限运行sudo mongod,但无法使用以下命令作为服务启动:sudo systemctl start mongod

我尝试了许多解决方案,并在每次尝试后进行测试,最终解决方法是将/data/db//var/lib/mongo//var/log/mongodb/的所有权更改为mongod

确切的命令:

sudo chown -R mongod:mongod /var/lib/mongo/
sudo chown -R mongod:mongod /var/log/mongodb/
sudo chown -R mongod:mongod /data/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接