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

今天我第一次用我的新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”时,我确实看到了data dir和db dir。在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
< p >编辑 获取

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


chown: mongod: Invalid argument

谢谢,大家好!

475628 次浏览

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

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

所以完整的命令是:

$ sudo mkdir -p /data/db

你需要创建< em > /数据/ db < / em >…这是一个名为/数据/的目录在你的根(即/)和子文件夹在那里称为/ db /

你得到权限错误,因为你需要使用sudo在MacOS的根目录中创建一个目录,sudo让你以管理员身份运行命令。

所以,运行这个…

$ sudo mkdir -p /data/db

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

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

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

您需要以root用户创建该目录

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

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


注意:

MongoDB也有一个选项,您可以在另一个位置创建数据目录,但这通常不是一个好主意,因为它只是稍微复杂的事情,如DB恢复,因为您总是必须手动指定DB -path。我不建议你这么做。


编辑:

错误消息是"无法创建/打开锁文件:/data/db/mongod. "锁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”。< / p >

# EYZ0:

首先检查你的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

还可以使用user-name和group-name,如下所示: (它们可以在/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

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

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

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

cd
mkdir -p temp/
mongod --dbpath .

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

在得到和Nik一样的错误之后

chown: id -u:无效参数

我发现这显然是因为使用了错误类型的引号(应该是) Ubuntu论坛

我只是用了

sudo chown $USER /data/db

作为一种替代,现在mongod有它需要的权限。

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

我用Finder找到了根目录,然后用“new folder”创建了一个新文件夹。对我来说完全管用。

注意:我使用的是OSX。

简单说明一下:

如果您尝试在不更改权限的情况下运行mongod,您可能会得到一个mongod。锁定/data/db目录下的文件(以及其他一些文件)。即使你改变了/data/db目录的权限,给你的$USER访问权限,你仍然会得到“无法创建/打开锁文件:/data/db/mongod.”lock errno:13 Permission denied"错误。运行ls -al /data/db,您可能会看到各个文件的权限仍然设置为root user,而不是$ user。你应该移除蒙神。锁定档案,还有其他人。然后当您再次运行mongod时,一切都将正常工作,您可以通过再次运行ls -al来验证文件权限是否与目录权限匹配。

在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

如果你不带参数运行mongo,它会假设你在生产机上运行,所以它会使用默认位置。

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

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

这对我来说很有用,可以在评论中找到:

sudo chown -R $USER /data/db

创建文件夹。

sudo mkdir -p /data/db/

给自己访问该文件夹的权限。

sudo chown `id -u` /data/db

然后可以运行mongod而不运行sudo。工作在OSX优胜美地

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

"sudo chown - r# EYZ0 /data/db"

这对我来说很有效! 希望这能解决你的问题。

为了修复OS X上的错误,我重新启动并停止了服务: $ brew服务重启mongodb $ brew服务停止mongodb < /代码> < / p >

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

该错误似乎是在升级mongodb自制包后出现的。

在当前版本的MongoDB中,我有3.2.10,它被默认存储到

# EYZ0

我有这个问题与现有的Mongodb设置。我仍然不确定为什么会发生这种情况,但出于某种原因,Mongod进程无法找到Mongod。配置文件。 因为它找不到配置文件,所以它试图在/data/ DB文件夹中找到DB文件,这个文件夹不存在。 然而,配置文件仍然可用,所以我确保进程具有配置文件的权限,并使用——config标志运行mongod进程,如下所示

mongod --config /etc/mongod.conf

在配置文件本身,我有这样的设置:

storage:
dbPath: /var/lib/mongodb

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

我所做的

brew install mongodb

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

在上面的来自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

这将启动服务,并在重新启动后重新启动它。

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

但是最近我尝试用service命令启动mongod,它为我工作,不需要创建/data/db目录。

service mongod start

可以使用如下命令查看mongod的状态。

service mongod status

当我试图启动mongodb时,我一直得到以下错误。

"shutting down with code:100"

我正在使用以下命令:

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

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

./mongod --dbpath ~/mongo-data

我只是想把这个抛到一边因为这个错误并不能说明这就是问题所在。我几乎删除了~/mongo-data目录的内容,看看是否有帮助。很高兴我记得cli参数有时不使用“=”符号。

这个解决办法解决了我的问题

  1. 创建目录为

    Sudo mkdir -p /data/db

    .使用实例
  2. 这将创建一个名为db的目录,并尝试从命令开始

    sudo mongod < / p >

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

Failed to set up listener: SocketException: Address already in use .(地址已被使用 如果你发现另一个错误,那么你必须通过输入terminal as

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

,找到mongod运行端口并关闭进程。 另一种方法是在启动mongod

时创建一个特定的端口
sudo mongod --port 27018

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

initAndListen: NonExistentPath: Data目录C:\ Data \db\ not found。,终止

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

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

在根目录中创建目录

sudo mkdir -p /data/db

现在更改所有者

sudo chown -R $USER /data

你可以开始了!

mongod

而不是使用sudo mongod,你不需要把每一次的密码,但对于真正的项目你应该使用sudo mongod,不要给普通用户权限!

我只是想在这里指出,如果你尝试这样做,你遇到了mkdir: /data/db: Read-only file system,请看看这个评论,它帮助了我:https://stackoverflow.com/a/58895373

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

有一个非常愚蠢的方法来制造这个问题,这是我首创的:

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

是的,这真的很愚蠢,但如果你已经在系统上一段时间了,它可以绊倒你。

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

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

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

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

Tilo给出的答案在此之前一直适用于我:

sudo chown -R 126:135 /data/db

我不得不使用:

sudo chown -R $USER /data/db

如果你使用Mac并运行Catalina和通过Homebrew安装Mongodb,你要做的就是输入这个命令,你就可以开始了。

brew services start mongodb-community

MongoDB可能会对dbPath文件夹感到困惑。

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

然而,当你启动它作为一个服务,例如systemctl start mongod,然后它读取配置文件,通常是/etc/mongod.cfg,在这个配置文件的默认值是

平台 包管理器 默认# EYZ0
RHEL / CentOS和亚马逊 百胜 # EYZ0
SUSE zypper # EYZ0
Ubuntu和Debian 恰当的 # EYZ0
macOS 酿造 # EYZ0

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

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

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

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

执行该命令创建mongodb db路径 # EYZ0 < / p >

这为我做了,当我运行mongod

确保Linux实例上有足够的磁盘空间。