今天我第一次用我的新mac电脑。我遵循mongodb.org上的入门指南,直到创建/data/db目录的步骤。顺便说一句,我用的是自制路线。

所以我打开一个终端,我认为我在你所谓的主目录,因为当我按“ls”时,我看到桌面应用程序、电影、音乐、图片、文档和库的文件夹。

所以我做了一个

mkdir -p /data/db

首先,它说许可被拒绝。我不停地尝试了半个小时,最后:

mkdir -p data/db

工作。当我“ls”,一个目录的数据和嵌套在其中的db文件夹确实存在。

然后我启动mongod,它抱怨找不到data/db

我做错什么了吗?

现在我已经完成了

sudo mkdir -p /data/db

当我执行“ls”时,我确实看到了data dir和db dir。在db目录下,什么都没有,当我运行mongod

Sun Oct 30 19:35:19 [initandlisten] exception in initAndListen: 10309 Unable to create/open lock file: /data/db/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating
Sun Oct 30 19:35:19 dbexit: 
Sun Oct 30 19:35:19 [initandlisten] shutdown: going to close listening sockets...
Sun Oct 30 19:35:19 [initandlisten] shutdown: going to flush diaglog...
Sun Oct 30 19:35:19 [initandlisten] shutdown: going to close sockets...
Sun Oct 30 19:35:19 [initandlisten] shutdown: waiting for fs preallocator...
Sun Oct 30 19:35:19 [initandlisten] shutdown: lock for final commit...
Sun Oct 30 19:35:19 [initandlisten] shutdown: final commit...
Sun Oct 30 19:35:19 [initandlisten] shutdown: closing all files...
Sun Oct 30 19:35:19 [initandlisten] closeAllFiles() finished
Sun Oct 30 19:35:19 [initandlisten] shutdown: removing fs lock...
Sun Oct 30 19:35:19 [initandlisten] couldn't remove fs lock errno:9 Bad file descriptor
Sun Oct 30 19:35:19 dbexit: really exiting now

编辑 获取错误消息

sudo chown mongod:mongod /data/db

chown: mongod: Invalid argument

谢谢,大家好!


当前回答

我只是想在这里指出,如果您尝试这样做,并且运行到mkdir: /data/db: Read-only文件系统,请参阅这个注释,它帮助了我:https://stackoverflow.com/a/58895373。

这样,如果有人在这个答案上,并控制F为“只读”,他们将看到这个

其他回答

我在现有的Mongodb设置中遇到了这个问题。我仍然不确定为什么会发生这种情况,但出于某种原因,Mongod进程无法找到Mongod。配置文件。 因为它找不到配置文件,所以它试图在/data/ DB文件夹中找到DB文件,这个文件夹不存在。 然而,配置文件仍然可用,所以我确保该进程具有配置文件的权限,并使用——config标志运行mongod进程,如下所示:

mongod --config /etc/mongod.conf

在配置文件本身,我有这样的设置:

storage:
  dbPath: /var/lib/mongodb

这就是进程如何再次找到真正的DB文件夹。

你需要创建/data/db…在你的根目录(即/)中有一个名为/data/的目录,其中的子文件夹名为/db/…

你得到权限错误,因为你需要使用sudo在MacOS的根目录中创建一个目录,sudo让你以管理员身份运行命令。

所以,运行这个…

$ sudo mkdir -p /data/db

这将提示您输入密码,这是您用来更改系统设置的相同密码(当您尝试在ecample的system Preferences中更改内容时打开的小对话框),可能与您用于登录的密码相同。

您在错误的位置创建了目录

/data/db意味着它直接在'/'根目录下,而你创建的'data/db'(没有前导/)可能只是在另一个目录中,比如'/root'主目录。

您需要以root用户创建该目录

或者你需要使用sudo,例如sudo mkdir -p /data/db

或者您需要执行su -以成为超级用户,然后使用mkdir -p /data/db创建目录


注意:

MongoDB也有一个选项,您可以在另一个位置创建数据目录,但这通常不是一个好主意,因为它只是稍微复杂的事情,如DB恢复,因为您总是必须手动指定DB -path。我不建议你这么做。


编辑:

你得到的错误信息是“无法创建/打开锁文件:/data/db/mongod.”锁errno:13权限被拒绝”。您创建的目录似乎没有正确的权限和所有权—— 它需要由运行MongoDB进程的用户可写。

要查看'/data/db/'目录的权限和所有权,请执行以下操作: (这是权限和所有权的样子)

$ ls -ld /data/db/
drwxr-xr-x 4 mongod mongod 4096 Oct 26 10:31 /data/db/

左边的“drwxr-xr-x”显示了用户、组和其他人的权限。 'mongod mongod'显示谁拥有该目录,以及该目录属于哪个组。 在这种情况下,两者都被称为“mongod”。

如果你的'/data/db'目录没有上述权限和所有权,请执行以下操作:

首先检查你的mongo用户有哪些用户和组:

# grep mongo /etc/passwd
mongod:x:498:496:mongod:/var/lib/mongo:/bin/false

您应该在/etc/passwd中有一个mongod条目,因为它是一个守护进程。

sudo chmod 0755 /data/db
sudo chown -R 498:496 /data/db    # using the user-id , group-id

还可以使用user-name和group-name,如下所示。 (可以在/etc/passwd和/etc/group中找到)

sudo chown -R mongod:mongod /data/db 

这样就可以了。

在下面的评论中,一些人使用了这个:

sudo chown -R `id -u` /data/db
sudo chmod -R go+w /data/db

or

sudo chown -R $USER /data/db 
sudo chmod -R go+w /data/db

缺点是$USER是一个有登录shell的帐户。 出于安全考虑,守护进程在理想情况下不应该有shell,这就是为什么你在上面密码文件的grep中看到/bin/false。

检查这里,以更好地理解目录权限的含义:

http://www.perlfect.com/articles/chmod.shtml

也许还可以查看通过谷歌可以找到的教程之一:“UNIX初学者”

到目前为止,我也曾经认为我们需要创建/data/db文件夹来启动mongod命令。

但是最近我尝试用service命令启动mongod,它为我工作,不需要创建/data/db目录。

service mongod start

可以使用如下命令查看mongod的状态。

service mongod status

简单说明一下:

If you tried running mongod without changing the permissions first, you'll likely have a mongod.lock file (and some other files) in the /data/db directory. Even after you change the permissions for the /data/db directory to give access to your $USER, you'll continue to get the "Unable to create/open lock file: /data/db/mongod.lock errno:13 Permission denied" error. Run ls -al /data/db and you'll probably see that the permissions for the individual files are still set to root for user, not to your $USER. You should remove the mongod.lock file, and the others as well. Then when you run mongod again, everything should work, and you can verify that the file permissions match the directory permissions by running ls -al again.