ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

所以我做了一个

mkdir -p /data/db

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

mkdir -p data/db

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

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

我做错了什么吗?

现在我已经完成了

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

感谢大家!

“无效参数”意味着 mongo 用户的符号名称在您的系统上是不同的——您可能使用不同的包或安装机制来安装 MongoDB。您应该检查 /etc/passwd 和 /etc/group 文件中的 mongo 用户 grep mongo /etc/passwd /etc/group 的符号名称(或 uid/gid)。如果这不起作用,请通过检查目录 ls -ld /var/lib/mongo 的所有者来检查名称。或者要查看 uid/gid,请执行以下操作:ls -lnd /var/lib/mongo。在我的情况下 drwxr-xr-x. 6 *487 480* 4096 Sep 20 2011 ... - 这意味着使用 487:480 作为参数
使用 UID/GID 与使用符号名称同义。例如,只需将 'mongod:mongod 替换为您使用上述方法找到的 uid/gid 数字即可。
既然我们知道如何正确添加这个目录(data/db),为什么这个目录一开始没有被包含在安装中呢?
如果您刚刚升级到 MacOS 10.15,此答案可能会有所帮助:stackoverflow.com/questions/58283257/…
如果您有最新版本的 MAC:随着新的 macOS Catalina 更新,文件夹“/data/db”变为只读,您无法修改它。按照此过程在另一个文件夹中创建数据库:1)更改 mongod 目录:sudo mongod --dbpath /System/Volumes/Data/data/db 2)给它一个别名:alias mongod="sudo mongod --dbpath/System /卷/数据/数据/db"

T
Tilo

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

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

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

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

或者你需要做su -成为超级用户,然后用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 的帐户。出于安全原因,理想情况下,守护进程不应该有外壳,这就是您在上面密码文件的 grep 中看到 /bin/false 的原因。

在这里查看以更好地理解目录权限的含义:

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

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


尝试执行 ls -ld /data/ls -ld /data/db/ .. 您将看到左侧列出的目录权限,然后是所有权,然后是目录名称。您应该确保目录可由运行 MongoDB 的用户 ID 写入。
@Tilo 是的,我已经完成了。第一个,chmod 没问题,第二个说“chown: mongod: Invalid argument”
这是整个线程正是我正在经历的。但我似乎也无法理解 mongo 的用户 ID 和组 ID 在我的系统上是什么,也无法在任何地方找到任何文档。我被困在 chown mongod:mongod 部分,因为它返回 invalid arguement
更新我选择了 sudo touch /data/db/mongod.locksudo chmod 0777 /data/db/mongd.lock 。她直接起身。
运行 sudo chown -R `id -u` /data/dbsudo chown -R $USER /data/db 而不是 sudo chown mongod:mongod /data/db 对我有用
C
Community

在得到与 Nik 相同的错误后

chown: id -u: 无效参数

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

相反,我只是使用

sudo chown $USER /data/db

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


如果有人觉得它有用:我遇到了同样的问题,但错误消息有点不同(说当我尝试 chown mongod:mongod 时组 'mongod' 不存在)-> 但是,使用 chown $USER 为我,谢谢...
我不得不为此添加一个 -R 。 “须藤chown -R $用户/数据/数据库”
I
Iman Mohamadi

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

sudo chown -R $USER /data/db

也为我。在我的 OSX 上通过 homebrew 安装 mongo 不会添加 mongod 用户和组。
C
Connor Leech

创建文件夹。

sudo mkdir -p /data/db/

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

sudo chown `id -u` /data/db

然后您可以在没有 sudo 的情况下运行 mongod。适用于 OSX 优胜美地


不要创建新目录,而是尝试重新启动 mongod 服务。例如:- service mongod restart
bogdanmac:~ iliebogdanbarbulescu$ sudo chown `id -u` /data/db chown: /data/db: No such file or directory
o
orluke

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

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

升级 mongodb homebrew 包后似乎出现了该错误。


l
loreii

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

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

./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 安装,请使用 service mongod status/start/stop
我确实查看了 mongo 日志。它一直在说缺少 /data/db 目录正在阻止启动。最终遇到了您的答案,这似乎是问题的原因?
这在 Windows 上的 Linux 子系统中使用 MongoDB 时也有效,在这种情况下,实际上无法在 fs 根目录创建 /data/db。
G
Gal Bracha

在 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

@MarkusWMahlberg 谢谢。它是那些感觉很奇怪但有效的事情之一。那么谁应该是该文件的所有者和组?
这取决于你的分布。查看用户名的 /etc/passwd - 该组可能是相同的。它通常是 mongomongodb
@MarkusWMahlberg 好的 - 我现在修复了它 - 通过 brew 安装时它不会创建用户和组,所以我只是将它设置为我自己的用户名。看看现在是否更安全。谢谢
谢谢。使用 brew 在 mac 上开发时,这可以解决问题。如果您只是在 mongodb 中使用测试数据,则不需要更高的安全性。 @MarkusWMahlberg 在 OS X 上,运行 mongod 的用户是 YOUR_USER_NAME,如果你只是用“mongod &”启动它。
S
Suraj Rao

如果您使用 Mac 并通过 Homebrew 运行 Catalina 并安装了 Mongodb,您只需输入此命令即可开始。

brew services start mongodb-community

b
blubberbo

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

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


R
Russell

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

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

所以完整的命令是:

$ sudo mkdir -p /data/db

T
Tal Delbari

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

mongod --config /etc/mongod.conf

在配置文件本身我有这个设置:

storage:
  dbPath: /var/lib/mongodb

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


我确认它发生在我身上。我们可以设置 --dbpath=/var/lib/mongodb,而不是配置文件。我虽然丢失了所有数据,但它仍然存在。
e
emrys57

我做了

brew install mongodb

在 2018 年 2 月 1 日,这给了我 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

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


E
EhevuTov

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

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

cd
mkdir -p temp/
mongod --dbpath .

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


J
Jupo

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

我刚刚使用 Finder 进入根目录并使用“新文件夹”创建了一个新文件夹。完全为我工作。

注意:我使用的是 OSX。


W
Wernfried Domscheit

MongoDB 可能会混淆 dbPath 文件夹。

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

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

Platform Package Manager 默认 storage.dbPath RHEL / CentOS 和 Amazon yum /var/lib/mongo SUSE zypper /var/lib/mongo Ubuntu 和 Debian apt /var/lib/mongodb macOS brew /usr/local/var/mongodb

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


J
Justin Jenkins

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

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

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

$ sudo mkdir -p /data/db

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


E
Ericgit

在根目录下创建目录

sudo mkdir -p /data/db

现在更改所有者

sudo chown -R $USER /data

你可以走了!

mongod

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


w
whiny_nil

只是一个简短的说明:

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


这是一个很好的说明。我没有锁定文件,但我确实需要更改我的数据和数据库文件夹的所有者。
C
Cloudish123

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

"shutting down with code:100" 

我正在使用以下命令:

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

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

./mongod --dbpath ~/mongo-data

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


D
Dharman

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

我通过运行 mkdir ~/data 创建一个 ~/data 文件夹来解决它

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

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

这是为我做的,当我跑 mongod


D
Devendra Bhat

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

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

service mongod start

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

service mongod status

M
Mehedi Abdullah

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

将目录创建为 sudo mkdir -p /data/db 这将创建一个名为 db 的目录,然后尝试使用命令 sudo mongod

如果您在启动 mongod 时遇到另一个错误或问题,您可能会发现问题为

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

ps ax | grep mongod
sudo kill ps_number

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

sudo mongod --port 27018

J
Jeremy Piednoel

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

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

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


P
Prakhar Agrawal

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

“sudo chown -R idname /data/db”

这对我有用!希望这能解决您的问题。


i
illcrx

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

/var/lib/mongodb


在这些情况下运行 mongod --dbpath /var/lib/mongodb 会有所帮助
S
Suraj Rao

Tilo 的答案对我有用,直到这个:

sudo chown -R 126:135 /data/db 

我不得不使用:

sudo chown -R $USER /data/db

a
a.t.

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

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

解决方案 类似于 linux 系统的解释:只需创建文件夹即可启动 mongod.exe(mongoDB 服务器)。

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


m
mtyson

有一种非常愚蠢的方法可以产生这个问题,我开创了这种方法:

1) 让你的 mongo 安装一段时间 2) 回来并且服务器没有运行 3) 尝试启动它,但这次不要使用 sudo 4) mongo 找不到 data/db/ 因为现在它正在查找用户主目录而不是 su 主目录

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

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


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅