今天我第一次用我的新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

谢谢,大家好!


当前回答

通过使用窗口管理器创建/data/db文件夹,我解决了这个完全相同的问题。我一开始尝试通过终端来做,为了在根目录中创建一个文件夹,我必须使用sudo。

我用Finder找到了根目录,然后用“new folder”创建了一个新文件夹。对我来说完全管用。

注意:我使用的是OSX。

其他回答

您的命令将在当前文件夹中创建目录结构,而不是计算机的根目录(即缺少的/)。

第一个命令是正确的,但是因为您试图在/目录下创建一个文件夹,这是一个受保护的目录,所以您需要在它前面加上sudo,这是“超级用户do”的缩写。然后你会被要求输入密码。

所以完整的命令是:

$ sudo mkdir -p /data/db

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

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

所以,运行这个…

$ sudo mkdir -p /data/db

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

如果你不带参数运行mongo,它会假设你在生产机上运行,所以它会使用默认位置。

使用您自己的数据库(开发或只是一个不同的):

./bin/mongod --dbpath ~/data/db

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

/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初学者”

在(重新)安装工具包后,我在一台Windows 10设备上得到了类似的错误;

initAndListen: NonExistentPath: Data目录C:\ Data \db\ not found。,终止

解决方案 类似于linux系统的解释:简单地创建文件夹就足以启动mongo .exe (mongoDB服务器)。

我想我可以把它留给那些在Windows设备上使用相同搜索词的人。