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