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