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

时间:2011-10-30 23:56:54

标签: macos mongodb

我今天第一次使用我的新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”时,我确实看到了数据目录和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

EDIT 获取

的错误消息
sudo chown mongod:mongod /data/db

chown: mongod: Invalid argument

谢谢大家!

28 个答案:

答案 0 :(得分:557)

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

/ data / db意味着它直接位于'/'根目录下,而你创建'data / db'(没有前导/)可能只是在另一个目录中,例如'/ root'主目录。

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

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

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

创建目录

注意:

MongoDB还有一个选项,你可以在另一个位置创建数据目录,但这通常不是一个好主意,因为它只是稍微复杂化了数据库恢复等事情,因为你总是需要手动指定数据库路径。我不建议这样做。


编辑:

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

左侧'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 for beginners”

答案 1 :(得分:106)

收到与Nik

相同的错误
  

chown:id -u:参数无效

我发现这显然是因为使用了错误的引号(应该是反引号Ubuntu Forums

相反,我只是使用了

  

sudo chown $ USER / data / db

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

答案 2 :(得分:82)

这适用于我,在评论中找到:

sudo chown -R $USER /data/db

答案 3 :(得分:64)

创建文件夹。

sudo mkdir -p /data/db/

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

sudo chown `id -u` /data/db

然后,您可以在mongod之前运行sudo。适用于OSX Yosemite

答案 4 :(得分:28)

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

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

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

答案 5 :(得分:20)

在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

答案 6 :(得分:12)

如果您在没有参数的情况下运行mongo,它会假设您正在生产计算机上运行,​​因此它使用默认位置。

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

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

答案 7 :(得分:7)

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

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

答案 8 :(得分:4)

在根目录中创建目录

sudo mkdir -p /data/db

现在更改所有者

sudo chown -R $USER /data

您很高兴!

mongod

您不需要输入每个密码,而不必使用sudo mongod,但是对于真实的项目,您应该使用sudo mongod,请勿将权限授予普通用户!

答案 9 :(得分:4)

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

我刚使用Finder进入根目录,并使用'新文件夹创建了一个新文件夹'。完全适合我。

注意:我使用的是OSX。

答案 10 :(得分:4)

我做了

brew install mongodb

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

上面的answer from orluke提示,我尝试了

$ brew services restart mongodb
一切都迸发出来。我的mongoose.createConnection()电话做了我想要的。社区版GUI MongoDB Compass将连接。我用Compass来查看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

这应该启动服务并在重新启动后重新启动它。

答案 11 :(得分:4)

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

mongod --config /etc/mongod.conf

在配置文件中我有这个设置:

storage:
  dbPath: /var/lib/mongodb

这就是进程再次找到真正的DB文件夹的方式。

答案 12 :(得分:3)

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

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

所以,请改为运行......

$ sudo mkdir -p /data/db

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

答案 13 :(得分:3)

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

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

所以完整的命令是:

$ sudo mkdir -p /data/db

答案 14 :(得分:2)

快速说明一下:

如果您尝试在不更改权限的情况下运行mongod,则可能在/ data / db目录中有mongod.lock文件(以及其他一些文件)。即使您更改了/ data / db目录的权限以授予对$ USER的访问权限,您仍然可以继续获取"无法创建/打开锁定文件:/data/db/mongod.lock错误:13许可被拒绝"错误。运行ls -al / data / db并且您可能会看到单个文件的权限仍然设置为root用户,而不是$ USER。您应该删除mongod.lock文件,以及其他文件。然后当你再次运行mongod时,一切都应该工作,你可以通过再次运行ls -al来验证文件权限是否与目录权限相匹配。

答案 15 :(得分:2)

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

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

cd
mkdir -p temp/
mongod --dbpath .

这将使你的当前工作目录中的mongo数据库成为

答案 16 :(得分:1)

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

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

service mongod start

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

service mongod status

答案 17 :(得分:1)

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

brew services start mongodb-community

答案 18 :(得分:1)

MongoDB 可能会混淆 dbPath 文件夹。

当您在没有 mongod 的情况下运行 dbpath 时,默认路径为 /data/db

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

<头>
平台 包管理器 默认storage.dbPath
RHEL / CentOS 和亚马逊 好吃 /var/lib/mongo
SUSE zypper /var/lib/mongo
Ubuntu 和 Debian 合适 /var/lib/mongodb
macOS 酿造 /usr/local/var/mongodb

因此,偶然地,您的 MongoDB 会根据您启动服务的方式尝试访问不同的数据文件夹。

答案 19 :(得分:1)

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

我通过运行 ~/data

创建一个 mkdir ~/data 文件夹解决了这个问题

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

然后运行这个命令创建一个mongodb db路径 sudo mongod --dbpath=/Users/username/data

这对我有用,当我跑 mongod

答案 20 :(得分:0)

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

/var/lib/mongodb

答案 21 :(得分:0)

输入&#34; id&#34;在终端上查看您可以提供的可用用户ID, 然后只需输入

即可

&#34; sudo chown -R idname / data / db&#34;

这对我来说很有用! 希望这可以解决您的问题。

答案 22 :(得分:0)

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

"shutting down with code:100" 

我正在使用以下命令:

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

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

./mongod --dbpath ~/mongo-data

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

答案 23 :(得分:0)

此解决方案解决了我的问题

  1. 将目录设为

    sudo mkdir -p / data / db

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

    sudo mongod

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

  

无法设置侦听器:SocketException:地址已在使用中   如果您发现另一个错误,则必须通过输入终端为

来终止mongod的运行过程
ps ax | grep mongod
sudo kill ps_number

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

sudo mongod --port 27018

答案 24 :(得分:0)

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

  

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

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

我想我应该把它留给在Windows设备上使用相同搜索词的人。

答案 25 :(得分:0)

有一个非常愚蠢的方法可以解决这个问题,我已经率先提出了

1)离开mongo安装片刻 2)回来,服务器没有运行 3)尝试启动它,但是这次不要使用sudo 4)mongo找不到data / db /,因为现在它在用户主目录而不是su主目录中查找

是的,它确实很愚蠢,但是如果由于您在系统上已经有一段时间了,它可能会使您绊倒。

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

答案 26 :(得分:0)

从MongoDB 4.4开始,MongoDB数据库工具现在与MongoDB服务器分开发布。

您需要下载:https://www.mongodb.com/try/download/database-tools?tck=docs_databasetools

然后将所有文件复制到/usr/bin 并且所有命令行都将可用。

答案 27 :(得分:0)

蒂洛(Tilo)的答案一直适用于我:

sudo chown -R 126:135 /data/db 

我必须使用:

sudo chown -R $USER /data/db