macos - Mongod 提示没有/data/db 文件夹

我今天第一次使用我的新 Mac。我一直在关注 mongodb.org 上的入门指南,直到创建/data/db 目录的步骤。顺便说一句,我使用了自制路线。

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

所以我做了一个

mkdir -p /data/db

首先,它说权限被拒绝。我一直在尝试不同的东西半个小时,最后:

mkdir -p data/db

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

然后我启动了 mongod,它提示找不到数据/db

我做错了吗?

现在我已经完成了

sudo mkdir -p /data/db

当我执行“ls”时,我确实看到了数据目录和数据库目录。但是在 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 表示它直接在 '/' 根目录下,而您创建的 'data/db'(没有前导/)可能只是在另一个目录中,例如 '/root' 主目录。

您需要以 root 身份创建此目录

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

或者你需要做su -成为 super 用户,然后用mkdir -p/data/db

创建目录

注意:

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


编辑:

您收到的错误消息是“无法创建/打开锁定文件:/data/db/mongod.lock errno:13 Permission denied”。您创建的目录似乎没有正确的权限和所有权—— 它需要对运行 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 中找到)

sudo chown -R mongod:mongod /data/db 

应该让它工作..

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

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

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

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

https://stackoverflow.com/questions/7948789/

相关文章:

authentication - 如何使用用户名和密码保护 MongoDB

mongodb - 如何通过shell脚本执行mongo命令?

mongodb - 如何从 MongoDB 获取随机记录?

mongodb - 查找两个日期之间的对象 MongoDB

mongodb - 使用另一个字段的值更新 MongoDB 字段

mongodb - 仅检索 MongoDB 集合中对象数组中的查询元素

mongodb - 获取集合中所有键的名称

javascript - 如何在 Mongoose 中更新/插入文档?

mongodb - 检查字段是否包含字符串

mongodb - 如何在 Mongo 中查询 "is not null"?