mongodb Mongod抱怨没有/ data / db文件夹

我今天第一次使用我的新Mac。 我正在按照mongodb.org上的入门指南进行操作,直到创build/ data / db目录。 顺便说一句,我用了自制的路线。

所以我打开一个terminal,我想我在你所谓的主目录,因为当我做“ls”时,我看到桌面应用程序电影音乐图片文件和图书馆的文件夹。

所以我做了一个

mkdir -p /data/db 

首先,它表示许可被拒绝。 我一直尝试不同的事情,一半一小时,最后:

 mkdir -p data/db 

工作。 当我“ls”,一个数据目录并嵌套在一个数据库文件夹确实存在。

然后我启动了Mongo,它抱怨没有find数据/分贝

我做错了什么?

现在我已经做了

 sudo mkdir -p /data/db 

当我做一个“LS”,我看到数据目录和数据库目录。 在数据库目录中,但是绝对没有什么,当我现在运行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 

感谢大家!

你在错误的地方创build了目录

/ data / db意味着它直接在'/'根目录下,而你创build'data / db'(不带前导/)可能就在另一个目录中,比如'/ root'homedirectory。

你需要以root身份创build这个目录

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

或者你需要做su -成为超级用户,然后用mkdir -p /data/db创build目录


注意:

MongoDB也有一个选项,可以在其他位置创build数据目录,但这通常不是一个好主意,因为它只是稍微复杂一些,比如数据库恢复,因为您总是需要手动指定数据库path。 我不会推荐这样做。


编辑:

您收到的错误消息是“无法创build/打开locking文件:/data/db/mongod.lock errno:13权限被拒绝” 。 您创build的目录似乎没有正确的权限和所有权 – 它需要由运行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 

您也可以使用用户名和组名,如下所示:(可以在/ etc / passwd和/ etc / group中find它们)

 sudo chown -R mongod:mongod /data/db 

这应该使其工作..

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

 sudo chown -R `id -u` /data/db 

要么

 sudo chown -R $USER /data/db 

缺点是$ USER是一个拥有loginshell的帐户。 为了安全起见,守护程序理想情况下应该没有shell,这就是为什么在上面的密码文件的grep中看到/ bin / false的原因。

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

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

也许还可以查看一下你可以通过Googlefind的教程:“初学者的UNIX”

在得到与Nik一样的错误之后

chown:id -u:无效的参数

我发现这显然是从使用错误types的引号(应该是反引号 )的Ubuntu论坛

相反,我只是用了

sudo chown $ USER / data / db

作为替代scheme,现在mongod具有所需的权限。

这适用于我,在评论中find:

 sudo chown -R $USER /data/db 

创build文件夹。

 sudo mkdir -p /data/db/ 

给自己的文件夹权限。

 sudo chown `id -u` /data/db 

那么你可以运行没有sudo mongod 。 适用于OSX Yosemite

在YOUR_USER_NAME和员工是组的情况下,在Mac上通过brew进行安装

 sudo mkdir -p /data/db sudo chmod +x+r+w /data/db/ sudo touch /data/db/mongod.lock sudo chown YOUR_USER_NAME:staff /data/db sudo chmod +x+r+w /data/db/mongod.lock sudo chown YOUR_USER_NAME:staff /data/db/mongod.lock 

要修复OS X上的错误,我重新启动并停止服务: $ brew services restart mongodb $ brew services stop mongodb

然后我运行了mongod --config /usr/local/etc/mongod.conf ,问题就没有了。

升级mongodb自制软件包后,似乎出现错误。

如果你在没有参数的情况下运行mongo,假设你正在生产机器上运行,所以它使用默认位置。

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

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

我通过使用我的窗口pipe理器创build/ data / db文件夹来解决完全相同的问题。 我尝试着通过terminal来开始,为了在根目录下创build一个文件夹,我不得不使用sudo。

我刚刚使用Finder进入根目录,并使用“新build文件夹”创build了一个新文件夹。 完全为我工作。

注意:我正在使用OSX。

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

第一个命令是正确的,但是因为您正在尝试在/创build一个文件夹,这是一个受保护的目录,所以您需要使用sudo (它是“superuser do”的缩写)作为前缀。 您将被要求input密码。

所以完整的命令是:

 $ sudo mkdir -p /data/db 

你需要创build/数据/数据库 …这是一个名为/数据/目录在你的根(即/ )和子目录在那里称为/ DB /

由于需要使用sudo在MacOS的根目录中创build一个目录,因此你会得到权限错误,sudo允许你以pipe理员身份运行命令。

所以,运行这个,而不是…

 $ sudo mkdir -p /data/db 

这将提示你input密码,这是你用来更改系统设置的相同密码(当你尝试改变系统首选项中的ecample时,打开的小对话框),而且可能与你用来login的密码相同。

只是一个简短的说明:

如果您先尝试运行mongod而不更改权限,则可能在/ data / db目录中有一个mongod.lock文件(和其他一些文件)。 即使在更改/ data / db目录的权限以授予访问您的$ USER的权限之后,您仍将继续获得“无法创build/打开locking文件:/data/db/mongod.lock errno:13 Permission denied “错误。 运行ls -al / data / db,你可能会发现单个文件的权限仍然设置为root用户,而不是你的$ USER。 你应该删除mongod.lock文件,以及其他的。 然后,当你再次运行mongod时,一切都应该工作,并且可以通过再次运行ls -al来validation文件权限是否符合目录权限。

你正在尝试创build一个你没有root权限的目录。

为了testingmongodb,我只使用我的用户目录中的一个目录,如:

 cd mkdir -p temp/ mongod --dbpath . 

这将使temp /中的mongo数据库在当前的工作目录中

在terminal上input“id”来查看可以input的用户ID,然后input

“sudo chown -R idname / data / db”

这为我解决了! 希望这可以解决您的问题。

在更多的MongoDB版本中,我有3.2.10,它被存储为默认值

/var/lib/mongodb