在MongoDB文件夹上设置读写权限

34

我刚刚在OSX上安装了MongoDB,并使用sudo mkdir -p /data/db设置了目录结构。

但是当我尝试从我的用户帐户运行mongod时,它返回了一个错误,指出我的用户帐户没有/data/db的读写权限。

我该如何为我的帐户设置适当的/data/db读写权限?

8个回答

79

确保运行mongod的用户帐户具有适当的目录权限。您可以执行以下操作来检查设置了哪些权限:

请注意,返回结果可能因系统而异。

例如,在Linux系统上,您可以使用ls -ld /data/db命令来检查/data/db目录的权限设置。

如果需要更改目录权限,请参考操作系统文档或联系系统管理员。

ls -ld /data/db/
如果它们被正确设置,它们应该看起来像这样...

drwxr-xr-x X user wheel XXX Date Time /data/db/

如果权限设置不正确,当尝试运行mongod时,您可能会看到类似于以下错误:

exception in initAndListen: XXXXX Unable to create/open lock file: /data/db/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating

要使权限设置正确,可以运行以下命令。
sudo chmod 0755 /data/db && sudo chown $USER /data/db

14
执行以下命令:$ sudo chmod 0755 /data/db && sudo chown $USER /data/db。将会更改/data/db目录的权限和所有者。注意,第二个命令需要使用sudo,以便在不更改文件系统中其他文件所有者的情况下更改/data/db的所有者为当前用户。 - EvgenyKolyakov
是的!在 chown 上不要忘记使用 sudo - coblr

11
sudo chmod 777 /data/db/ 

应该可以在Mac上运行。在运行此命令之前,权限看起来像:

drwxr-xr-x  X User  wheel  Date /data/db

执行完命令后

drwxrwxrwx  X User  wheel  Date /data/db

“wheel” 是什么意思?蓝色的 UserDate 部分需要替换成其他内容吗? - Agent Zebra

6
这是我亲测有效的方法。我使用的是Mac,不过如果你使用Windows也可以尝试。
sudo chmod 777 /data/db

sudo chmod 0755 /data/db && chown $USER /data/db - Manoj Kumar
我们难道不应该出于安全考虑而避免使用这个吗?! - Van Tran
在你的代码中,$USER 是指数据库的用户名还是计算机用户账户?或者你是直接输入 $USER 这个字符串?哈哈,谢谢。 - Agent Zebra

3
有三种用户分类:拥有者、组内成员和其他人; chmod 777 /path/to/file允许所有人读写该文件,但是chmod 775 /path/to/file只允许拥有者/组成员读写该文件。如果您正在开发Web服务器,请使用chmod 775 /path/to/file。这里提供一些有用的阅读材料,特别是关于为什么使用777、775等数字而不是其他数字的原因:https://www.maketecheasier.com/file-permissions-what-does-chmod-777-means/

2

这些建议都不正确,mongodb-org-3.4.16-1.el7.x86_64 存在其他问题。它不能使用自定义的数据库路径启动。

[root@localhost vagrant]# chmod 777 /data/ /data/mongodb
[root@localhost vagrant]# chown mongod:mongod /data/ /data/mongodb
[root@localhost vagrant]# ls -lad /data/mongodb/
drwxrwxrwx. 2 mongod mongod 6 Jul 11 15:24 /data/mongodb/
[root@localhost vagrant]#  systemctl start mongod
Job for mongod.service failed because the control process exited with error code. See "systemctl status mongod.service" and "journalctl -xe" for details.
[root@localhost vagrant]# stat /data/mongodb^C
[root@localhost vagrant]# !tail
tail /var/log/mongodb/mongod.log
2018-07-11T15:39:10.786+0000 I STORAGE  [initandlisten] exception in initAndListen: 20 Attempted to create a lock file on a read-only directory: /data/mongodb, terminating
2018-07-11T15:39:10.786+0000 I NETWORK  [initandlisten] shutdown: going to close listening sockets...
2018-07-11T15:39:10.786+0000 I NETWORK  [initandlisten] shutdown: going to flush diaglog...
2018-07-11T15:39:10.786+0000 I CONTROL  [initandlisten] now exiting
2018-07-11T15:39:10.786+0000 I CONTROL  [initandlisten] shutting down with code:100
[root@localhost vagrant]# rpm -qa | grep mongo
mongodb-org-tools-3.4.16-1.el7.x86_64
mongodb-org-shell-3.4.16-1.el7.x86_64
mongodb-org-server-3.4.16-1.el7.x86_64
mongodb-org-mongos-3.4.16-1.el7.x86_64
mongodb-org-3.4.16-1.el7.x86_64

0

对我来说,所有给出的答案都没有起作用。最终,我将我的个人操作系统用户配置为root用户,然后手动进入db文件夹——右键单击以查看信息——并添加了自己的读写权限。


0

只需运行

sudo chown group:user /data/db

其中group是您用户的一个组


“where group is a group of your user” 是什么意思?请澄清。 - Agent Zebra

0
根据Mongodb大学课程M103,权限级别将会是:
sudo chmod 600 /path/to/db

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