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


474

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

因此,我打开了一个终端,并认为我在您称为主目录的位置,因为当我执行“ ls”时,我会看到“桌面应用程序电影”“音乐图片”文档和库的文件夹。

所以我做了一个

mkdir -p /data/db

首先,它说许可被拒绝。我半小时不停地尝试不同的东西,最后:

mkdir -p data/db

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

然后我启动mongod,它抱怨找不到数据/数据库

我做错什么了吗?

现在我已经完成了

sudo mkdir -p /data/db

当我执行“ ls”时,我会看到数据目录和db目录。虽然在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

谢谢大家!


1
“无效参数”意味着mongo用户的符号名在您的系统上是不同的-您可能使用了不同的软件包或安装机制来安装MongoDB。您应该在/ etc / passwd和/ etc / group文件中检查mongo用户的符号名(或uid / gid)grep mongo /etc/passwd /etc/group。如果这样不起作用,请通过检查目录的所有者来检查名称ls -ld /var/lib/mongo。或查看uid / gid这样做:ls -lnd /var/lib/mongo。在我的情况下drwxr-xr-x. 6 *487 480* 4096 Sep 20 2011 ...-这意味着使用487:480作为参数
Tilo

使用UID / GID与使用符号名同义。例如,只需将'mongod:mongod替换为通过上述方法找到的uid / gid数字即可。
的Tilo

既然我们知道如何正确添加此目录(data / db),那么为什么该目录没有首先包含在安装中?
winux

如果您刚升级到MacOS的10.15,这个答案可能会帮助:stackoverflow.com/questions/58283257/...
亚当Zerner

如果您具有最新版本的MAC:随着新的macOS Catalina更新,文件夹“ / data / db”变为只读状态,因此无法对其进行修改。请按照以下步骤在另一个文件夹中创建数据库:1)更改mongod目录:sudo mongod --dbpath / System / Volumes / Data / data / db 2)给它起一个别名:alias mongod =“ sudo mongod --dbpath / System / Volumes / Data / data / db”
Farbod Aprin

Answers:


636

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

/ data / db表示它直接位于“ /”根目录下,而您可能只是在另一个目录(例如“ / root”主目录)内创建了“ data / db”(不带前导/)。

您需要以根用户身份创建此目录

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

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


注意:

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


编辑:

您收到的错误消息是 “无法创建/打开锁定文件:/data/db/mongod.lock 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

您还可以使用用户名和组名,如下所示:(它们可以在/ 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的帐户。出于安全原因,理想地,守护程序应该没有外壳程序,这就是为什么您在上面的密码文件的grep中看到/ bin / false的原因。

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

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

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


2
尝试执行操作ls -ld /data/ls -ld /data/db/..您会看到左侧列出了目录权限,然后是所有权,然后是目录名称。您应该确保目录可由运行MongoDB的用户ID写入。

2
@Tilo是的,我已经完成了。第一个,chmod正常,第二个说“ chown:mongod:Invalid arguments”
Nik So

3
这就是我正在经历的整个线程。但是我似乎也无法理解mongo的user-id和group-id在我的系统上是什么,也找不到任何地方的文档。我被卡在chomon mongod:mongod部分上,因为它返回了invalid arguement
Trip

10
更新sudo touch /data/db/mongod.lock和一起去了sudo chmod 0777 /data/db/mongd.lock。她开始了。
2012年

141
跑步sudo chown -R `id -u` /data/db还是sudo chown -R $USER /data/db代替sudo chown mongod:mongod /data/db了我

117

得到与Nik相同的错误后

chown:id -u:无效参数

我发现这显然是由于使用了错误类型的引号引起的(应该是反引号 Ubuntu论坛

相反,我只是用

须藤chown $ USER / data / db

作为替代方案,现在mongod拥有所需的权限。


4
如果有人发现它有用:我遇到了同样的问题,但是错误消息有所不同(表示当我尝试使用chown mongod:mongod时,组“ mongod”不存在)->但是,使用chown $ USER可我,谢谢...
Trainoasis 2014年

6
我必须为此添加-R。“ sudo chown -R $ USER / data / db”
凯文

1
对于新手的完美答案,
Pyae Sone


73

创建文件夹。

sudo mkdir -p /data/db/

授予自己对该文件夹的权限。

sudo chown `id -u` /data/db

然后,您mongod无需运行即可sudo。在OSX Yosemite上工作


1
与其重新创建目录,不如尝试重新启动mongod服务。例如:-服务mongod重新启动
Devendra Bhat

bogdanmac:~ iliebogdanbarbulescu$ sudo chown `id -u` /data/db chown: /data/db: No such file or directory
bibscy

32

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

然后我跑了 mongod --config /usr/local/etc/mongod.conf,问题解决了。

升级mongodb homebrew软件包后,似乎出现了错误。


23

在Mac上通过brew进行安装,而YOUR_USER_NAME和staff是该组

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

@MarkusWMahlberg谢谢。这是那些感觉很奇怪但很奏效的事情之一。那么谁应该是该文件的所有者和组?
Gal Bracha 2014年

那取决于你的分布。查看/etc/passwd用户名-该组可能是相同的。通常是mongomongodb
Markus W Mahlberg 2014年

@MarkusWMahlberg好的-我现在修复了它-通过brew安装时,它不会创建用户和组,因此我只是将其设置为自己的用户名。看看现在是否更安全。谢谢
Gal Bracha 2014年

谢谢。在带有brew的Mac上进行开发时,这可以解决此问题。如果仅在mongodb中使用测试数据,则无需更高的安全性。@ OS OS X上的@MarkusWMahlberg,运行mongod的用户就是YOUR_USER_NAME,如果您直接以“ mongod&”开头。
gaspard 2015年

22

如果您在不带参数的情况下运行mongo,则假定您正在生产机器上运行,因此使用默认位置。

使用您自己的数据库(dev或其他数据库):

./bin/mongod --dbpath ~/data/db

这是否解释了为什么不使用/etc/mongod.conf中声明的设置?在Ubuntu 16.04上安装3.6.5时出现问题。
黑暗之星

尝试以详细(-v)模式启动或显式强制配置(--config):docs.mongodb.com/manual/reference/program/mongod 如果使用apt-get安装,请使用服务mongod status / start启动它/ stop
loreii,

我确实调查了mongo日志。它一直在说/ data / db目录的缺乏阻止了启动。最终遇到您的答案,这似乎是问题的原因?
黑暗之星

当在Windows的Linux子系统中使用MongoDB时,这也是可行的,因为无法在fs根目录下实际创建/ data / db。
hiergiltdiestfu

8

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

mongod --config /etc/mongod.conf

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

storage:
  dbPath: /var/lib/mongodb

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


1
我确认发生在我身上。除了配置文件,我们可以设置--dbpath = / var / lib / mongodb。尽管我丢失了所有数据,但仍然存在。
lenhhoxung

8

我做了

brew install mongodb

在2018-02-01上发布了mongodb3.6.2版本。

在上述orluke回答提示下,我尝试了

$ brew services restart mongodb

一切都变成了生命。我的mongoose.createConnection()电话做了我想要的。该GUI MongoDB的指南针,社区版,将连接。我用指南针看了一下local.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 services restart将服务设置为在登录时运行。所以我做了

brew services stop mongodb
brew services start mongodb

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

brew services start mongodb

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



7

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

第一个命令是正确的,但是由于您试图在中创建一个文件夹/,该文件夹是受保护的目录,因此需要在该文件夹前面加上sudo,这是“超级用户”的缩写。然后将要求您输入密码。

因此完整的命令将是:

$ sudo mkdir -p /data/db

6

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

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

所以,改为运行此...

$ sudo mkdir -p /data/db

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


6

您正在尝试创建没有超级用户访问权限的目录。

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

cd
mkdir -p temp/
mongod --dbpath .

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


6

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

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

注意:我正在使用OSX。


5

请注意:

如果您尝试运行mongod而不先更改权限,则/ data / db目录中可能会有mongod.lock文件(和其他一些文件)。即使您更改了/ data / db目录的访问权限以授予$ USER访问权限,您仍将继续获得“无法创建/打开锁文件:/data/db/mongod.lock errno:13权限被拒绝”错误。运行ls -al / data / db,您可能会发现单个文件的权限仍然设置为root用户,而不是$ USER。您应该删除mongod.lock文件,以及其他文件。然后,当您再次运行mongod时,一切都会正常工作,并且可以再次运行ls -al来验证文件权限是否与目录权限匹配。


这是一个很好的笔记。我没有锁定文件,但确实需要更改数据和db文件夹的所有者。
卡拉尼卡斯

5

在根目录下创建目录

sudo mkdir -p /data/db

现在更改所有者

sudo chown -R $USER /data

你很好!

mongod

sudo mongod除了使用,您不需要输入Everythime密码,但是对于实际的项目,您应该使用sudo mongod,请勿将权限授予普通用户!


4

尝试启动mongodb时,我不断收到以下错误。

"shutting down with code:100" 

我正在使用以下命令:

./mongod --dbpath=~/mongo-data

对我来说,解决方法是我不需要“ =”符号,这会导致错误。所以我做了

./mongod --dbpath ~/mongo-data

只是想把它扔在那里,因为错误绝不表明这是问题所在。我几乎删除了〜/ mongo-data目录的内容,以查看是否有帮助。很高兴,我记得cli参数有时不使用“ =”号。


3

直到这一天,我还曾经认为我们需要创建/ data / db文件夹以启动mongod命令。

但是最近我尝试使用service命令启动mongod,它对我有用,因此不需要创建/ data / db目录。

service mongod start

要检查mongod的状态,您可以运行以下命令。

service mongod status

3

这个解决方案解决了我的问题

  1. 建立目录为

    须藤mkdir -p / data / db

  2. 这将创建一个名为db的目录,然后尝试以命令开头

    苏多蒙哥

如果您在启动mongod时遇到其他错误或问题,您可能会发现以下问题:

无法设置侦听器:SocketException:地址已在使用中如果您发现另一个错误,则必须通过键入terminal作为命令来终止mongod的运行进程

ps ax | grep mongod
sudo kill ps_number

并找到mongod运行端口并终止该进程。另一种方法是在启动mongod时创建特定端口

sudo mongod --port 27018

2

在终端上键入“ id”以查看您可以提供的可用用户ID,然后只需键入

“ sudo chown -R idname / data / db”

这为我解决了!希望这能解决您的问题。


2

在最新版本的MongoDB中,我有3.2.10,它默认存储在

/var/lib/mongodb


1
mongod --dbpath /var/lib/mongodb在这种情况下跑步会
有所

1

(重新)安装工具包后,在Windows 10设备上出现了类似的错误;

initAndListen中的异常:NonExistentPath:找不到数据目录C:\ data \ db \。

解决方案 与针对linux系统的解释类似:只需制作文件夹就足以启动mongod.exe(mongoDB服务器)。

我想我可能会把它留给在Windows设备上使用相同搜索词结尾的人。


1

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

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


0

我开创了一种真正愚蠢的方式来创建此问题:

1)暂时保留一下mongo安装2)重新启动并且服务器未运行3)尝试启动它,但这次不要使用sudo 4)mongo找不到data / db /,因为现在它正在查找用户主目录而不是su主目录

是的,它确实很愚蠢,但是如果由于您在系统上而花了一段时间,它可能会使您崩溃。

简短答案:请确保您使用相同的隐含主目录运行mongo

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.