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

谢谢,大家好!


当前回答

我所做的

brew install mongodb

在2018-02-01,这给了我mongodb 3.6.2版本。

在上面orluke的回答的提示下,我试着

$ brew services restart mongodb

一切都生机勃勃。我的mongoose.createConnection()调用完成了我想要的。GUI MongoDB Compass(社区版本)将连接。我用指南针查了当地的情况。startup_log集合。其中有一个文档,我刚启动mongoDB服务的日志

cmdLine:Object
    config:"/usr/local/etc/mongod.conf"

确实有这样一份文件:

$ more /usr/local/etc/mongod.conf
systemLog:
  destination: file
  path: /usr/local/var/log/mongodb/mongo.log
  logAppend: true
storage:
  dbPath: /usr/local/var/mongodb
net:
  bindIp: 127.0.0.1

还有一个/usr/local/var/mongodb目录,里面有很多晦涩的文件。所以这似乎是现在安装工作的方式。

我不确定是否brew服务重启设置服务在登录时运行。所以我做了

brew services stop mongodb
brew services start mongodb

希望重启后能再次启动。事实也的确如此。事实上,现在,我认为在初始安装之后要做的正确的事情是

brew services start mongodb

这将启动服务,并在重新启动后重新启动它。

其他回答

简单说明一下:

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.

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

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

在当前版本的MongoDB中,我有3.2.10,它被默认存储到

/var/lib/mongodb

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

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

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

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

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

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

service mongod start

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

service mongod status