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

Nik*_* So 433 macos mongodb

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

所以我打开一个终端,我想我就是你所谓的主目录,因为当我做"ls"时,我会看到桌面应用电影音乐图片文档和图书馆的文件夹.

所以我做了一个

mkdir -p /data/db
Run Code Online (Sandbox Code Playgroud)

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

mkdir -p data/db
Run Code Online (Sandbox Code Playgroud)

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

然后我启动mongod并抱怨没有找到data/db

我做错了什么吗?

现在我已经完成了

sudo mkdir -p /data/db
Run Code Online (Sandbox Code Playgroud)

当我做"ls"时,我确实看到了数据目录和db目录.虽然db dir里面没有任何东西,当我现在运行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
Run Code Online (Sandbox Code Playgroud)

编辑获取错误消息

sudo chown mongod:mongod /data/db

chown: mongod: Invalid argument
Run Code Online (Sandbox Code Playgroud)

感谢大家!

Til*_*ilo 600

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

/数据/ DB意味着它直接在"/"根目录下,而创建"数据/ DB"(不带前导/)可能只是内部的其他目录,如"/ root"的home目录.

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

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

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


注意:

MongoDB也有一个选项,您可以创建在其他位置的数据目录,但是这通常不是一个好主意,因为它只是稍微复杂的事情,如DB恢复,因为你总是要手动指定数据库路径.我不建议这样做.


编辑:

您收到的错误消息是"无法创建/打开锁定文件:/data/db/mongod.lock错误:13权限被拒绝".您创建的目录似乎没有正确的权限和所有权 - 它需要由运行MongoDB进程的用户写入.

要查看'/ data/db /'目录的权限和所有权,请执行以下操作:(这是权限和所有权应该是什么样子)

$ ls -ld /data/db/
drwxr-xr-x 4 mongod mongod 4096 Oct 26 10:31 /data/db/
Run Code Online (Sandbox Code Playgroud)

左侧'drwxr-xr-x'显示用户,组和其他人的权限.'mongod mongod'显示谁拥有该目录,以及该目录所属的组.在这种情况下,两者都被称为"mongod".

如果您的'/ data/db'目录没有上述权限和所有权,请执行以下操作:

首先检查您的mongo用户拥有的用户和组:

# grep mongo /etc/passwd
mongod:x:498:496:mongod:/var/lib/mongo:/bin/false
Run Code Online (Sandbox Code Playgroud)

你应该在/ etc/passwd中有一个mongod条目,因为它是一个守护进程.

sudo chmod 0755 /data/db
sudo chown -R 498:496 /data/db    # using the user-id , group-id
Run Code Online (Sandbox Code Playgroud)

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

sudo chown -R mongod:mongod /data/db 
Run Code Online (Sandbox Code Playgroud)

应该让它工作..

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

sudo chown -R `id -u` /data/db
sudo chmod -R go+w /data/db
Run Code Online (Sandbox Code Playgroud)

要么

sudo chown -R $USER /data/db 
sudo chmod -R go+w /data/db
Run Code Online (Sandbox Code Playgroud)

缺点是$ USER是一个具有登录shell的帐户.出于安全原因,守护进程理想情况下不应该有shell,这就是为什么你在上面的密码文件的grep中看到/ bin/false的原因.

点击此处以更好地了解目录权限的含义:

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

也许还可以查看一下您可以通过Google找到的教程:"UNIX for beginners"

  • 运行`sudo chown -R \`id -u \`/ data/db`或`sudo chown -R $ USER/data/db`而不是`sudo chown mongod:mongod/data/db`为我做了诀窍 (139认同)
  • **更新**我选择了`sudo touch/data/db/mongod.lock`和`sudo chmod 0777/data/db/mongd.lock`.她开始了. (10认同)
  • 这是完整的线程正是我正在经历的.但我似乎也无法理解mongo的user-id和group-id在我的系统上是什么,也没有在任何地方找到任何文档.我被困在chong mongod:mongod部分,因为它返回了一个"无效的争论" (3认同)
  • 尝试做`ls -ld/data /`和`ls -ld/data/db /`..你会看到左侧列出的目录权限,然后是所有权,然后是目录名.你应该确保目录是由运行MongoDB的user-id写的. (2认同)
  • @Tilo是的我已经完成了它们.第一个,chmod没问题,第二个说"chown:mongod:无效的论点" (2认同)
  • 出于安全考虑,你可能不想将mongod作为ROOT运行!相反,您应该检查mongod需要写入哪些目录(例如,日志文件,db文件),并使MongoDB用户可以写入这些目录. (2认同)
  • 如果我们正在进行手动安装,我想我应该创建一个名为mongod的用户和用户组.我还怀疑其他人使用当前用户作为data/db文件夹的所有者来获取快捷方式.这样做最正确的方法是什么? (2认同)

小智 114

得到与Nik相同的错误

chown:id -u:参数无效

我发现这显然发生在使用错误类型的引号(应该是反引号)Ubuntu论坛

相反,我只是用过

sudo chown $ USER/data/db

作为替代方案,现在mongod拥有它需要的权限.

  • 我不得不在此添加-R."sudo chown -R $ USER/data/db" (6认同)
  • 如果有人发现它有用:我有同样的问题,但错误信息有点不同(说当我尝试chown mongod:mongod时组'mongod'不存在) - >然而,使用chown $ USER工作我,谢谢...... (4认同)

Ima*_*adi 86

这对我有用,在评论中找到:

sudo chown -R $USER /data/db
Run Code Online (Sandbox Code Playgroud)

  • 也对我来说。在OSX上通过自制程序安装mongo不会添加mongod用户和组。 (2认同)

Con*_*ech 69

创建文件夹.

sudo mkdir -p /data/db/
Run Code Online (Sandbox Code Playgroud)

授予自己该文件夹的权限.

sudo chown `id -u` /data/db
Run Code Online (Sandbox Code Playgroud)

那你就可以mongod不用了sudo.适用于OSX Yosemite


orl*_*uke 29

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

然后我跑了mongod --config /usr/local/etc/mongod.conf,问题就消失了.

升级mongodb自制程序包后似乎出现错误.


Gal*_*cha 22

在Mac上安装brew,其中YOUR_USER_NAME和工作人员是该组

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
Run Code Online (Sandbox Code Playgroud)


lor*_*eii 15

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

使用您自己的数据库(dev或只是一个不同的数据库):

./bin/mongod --dbpath ~/data/db
Run Code Online (Sandbox Code Playgroud)


小智 9

如果您使用 Mac 并通过 Homebrew 运行 Catalina 和 Installed Mongodb,那么您只需输入此命令即可开始。

brew services start mongodb-community
Run Code Online (Sandbox Code Playgroud)


Wer*_*eit 9

MongoDB 的文件夹可能会令人困惑dbPath

当您mongod没有运行dbpath时,默认路径是/data/db

但是,当您将其作为服务启动时,例如,systemctl start mongod它通常会读取配置文件,/etc/mongod.cfg在此配置文件中,默认值是

平台 包管理器 默认storage.dbPath
RHEL / CentOS 和亚马逊 /var/lib/mongo
苏世 齐普 /var/lib/mongo
Ubuntu 和 Debian 易于 /var/lib/mongodb
苹果系统 酿造 /usr/local/var/mongodb

因此,您的 MongoDB 会意外地尝试访问不同的数据文件夹,具体取决于您启动服务的方式。


blu*_*rbo 8

我只是想在这里指出,如果您尝试此操作并遇到mkdir: /data/db: Read-only file system,请参阅此评论,这对我有帮助:https : //stackoverflow.com/a/58895373

这样,如果有人在这个答案上并且将 Control F 设置为“只读”,他们会看到这个


Rus*_*ell 7

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

第一个命令是正确的,但是因为您要在/受保护的目录中创建一个文件夹,所以您需要在它前面加上前缀sudo,它是“超级用户 do”的缩写。然后系统会要求您输入密码。

所以完整的命令是:

$ sudo mkdir -p /data/db
Run Code Online (Sandbox Code Playgroud)


Ehe*_*Tov 6

您正在尝试创建一个您没有 root 访问权限的目录。

为了测试 mongodb,我只使用用户目录中的一个目录,例如:

cd
mkdir -p temp/
mongod --dbpath .
Run Code Online (Sandbox Code Playgroud)

这将从您当前的工作目录在 temp/ 中创建一个 mongo 数据库


Blo*_*gic 6

在根目录下创建目录

sudo mkdir -p /data/db
Run Code Online (Sandbox Code Playgroud)

现在更改所有者

sudo chown -R $USER /data
Run Code Online (Sandbox Code Playgroud)

你可以走了!

mongod
Run Code Online (Sandbox Code Playgroud)

而不是使用sudo mongod,您不需要输入所有密码,但对于真正的项目,您应该使用sudo mongod,不要授予普通用户权限!


Jus*_*ins 5

您需要创建/data/db ... 这是根目录(即/)中名为/data/的目录和其中名为/db/ 的子文件夹...

您收到权限错误,因为您需要使用sudo在 MacOS 的根目录中创建目录,sudo 允许您以管理员身份运行命令。

所以,改为运行这个......

$ sudo mkdir -p /data/db
Run Code Online (Sandbox Code Playgroud)

这将提示您输入密码,它与您用于更改系统设置的密码相同(当您尝试在 ecample 的系统偏好设置中更改内容时打开的那个小对话框),并且可能与您用于登录的密码相同。


Jup*_*upo 5

通过使用窗口管理器创建/ data / db文件夹,我克服了这个完全相同的问题。我首先尝试通过终端执行此操作,然后为了在根目录中创建文件夹,我不得不使用sudo。

我只是使用Finder转到根目录,并使用“新文件夹”创建了一个新文件夹。完全为我工作。

注意:我正在使用OSX。


Tal*_*ari 5

我在现有的Mongodb安装程序中遇到了这个问题。我仍然不确定为什么会这样,但是由于某种原因,Mongod进程找不到mongod.config文件。因为找不到配置文件,所以它尝试在/ data / db(一个不存在的文件夹)中找到数据库文件。但是,配置文件仍然可用,因此我确保该进程具有配置文件的权限,并使用--config标志运行mongod进程,如下所示:

mongod --config /etc/mongod.conf
Run Code Online (Sandbox Code Playgroud)

在配置文件本身中,我有以下设置:

storage:
  dbPath: /var/lib/mongodb
Run Code Online (Sandbox Code Playgroud)

这就是该过程可以再次找到真实数据库文件夹的方式。


emr*_*s57 5

I did

brew install mongodb
Run Code Online (Sandbox Code Playgroud)

on 2018-02-01 and that gave me mongodb version 3.6.2.

Prompted by the answer from orluke above, I tried just

$ brew services restart mongodb
Run Code Online (Sandbox Code Playgroud)

and everything sprang into life. My mongoose.createConnection() call did what I wanted. The GUI MongoDB Compass, the community version, would connect. I used Compass to look at the local.startup_log collection. That had one document in, the log of me just starting the mongoDB service, and that had

cmdLine:Object
    config:"/usr/local/etc/mongod.conf"
Run Code Online (Sandbox Code Playgroud)

and indeed there was such a file:

$ 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
Run Code Online (Sandbox Code Playgroud)

and there was a /usr/local/var/mongodb directory with lots of obscure files. So that seems to be how the installation works now.

I'm not sure if brew services restart sets the service to run at login. So I did

brew services stop mongodb
brew services start mongodb
Run Code Online (Sandbox Code Playgroud)

并希望重新启动后再次启动它。而且确实如此。实际上,现在,我认为在初始安装后要做的正确的事情是

brew services start mongodb
Run Code Online (Sandbox Code Playgroud)

并且应该会启动该服务,并在重新启动后重新启动它。


小智 5

Mongodb 运行时会在设备根文件夹中mongod查找文件夹作为 db 的路径。~/data/db

~/data我通过运行创建一个文件夹解决了这个问题mkdir ~/data

在根文件夹中输入 来检查数据文件夹是否存在ls。然后导航到数据文件夹并仔细检查pwd应该给你/Users/username/data

然后运行此命令创建 mongodb 数据库路径 sudo mongod --dbpath=/Users/username/data

这对我来说是这样,当我跑步时mongod


归档时间:

查看次数:

352589 次

最近记录:

6 年,10 月 前