我今天第一次使用我的新 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
感谢大家!
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 作为参数
您在错误的位置创建了目录
/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 初学者”
在得到与 Nik 相同的错误后
chown: id -u: 无效参数
我发现这显然是由于使用了错误类型的引号引起的(应该是反引号)Ubuntu Forums
相反,我只是使用
sudo chown $USER /data/db
作为替代方案,现在 mongod 拥有所需的权限。
这对我有用,在评论中找到:
sudo chown -R $USER /data/db
创建文件夹。
sudo mkdir -p /data/db/
授予自己对该文件夹的权限。
sudo chown `id -u` /data/db
然后您可以在没有 sudo
的情况下运行 mongod
。适用于 OSX 优胜美地
bogdanmac:~ iliebogdanbarbulescu$ sudo chown `id -u` /data/db chown: /data/db: No such file or directory
为了在 OS X 上修复该错误,我重新启动并停止了服务: $ brew services restart mongodb $ brew services stop mongodb
然后我运行 mongod --config /usr/local/etc/mongod.conf
,问题就消失了。
升级 mongodb homebrew 包后似乎出现了该错误。
如果您在没有参数的情况下运行 mongo,则假定您正在生产机器上运行,因此它使用默认位置。
使用您自己的数据库(开发或只是一个不同的):
./bin/mongod --dbpath ~/data/db
在 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
/etc/passwd
- 该组可能是相同的。它通常是 mongo
或 mongodb
。
如果您使用 Mac 并通过 Homebrew 运行 Catalina 并安装了 Mongodb,您只需输入此命令即可开始。
brew services start mongodb-community
我只是想在此指出,如果您尝试此操作并遇到 mkdir: /data/db: Read-only file system
,请查看此评论,这对我有帮助:https://stackoverflow.com/a/58895373。
这样,如果有人在这个答案上并为“只读”执行 Control F,他们将看到这个
您的命令将在当前文件夹中创建目录结构,而不是您计算机的根目录(即缺少的 /
所在的目录)。
第一个命令是正确的,但是因为您试图在 /
中创建一个文件夹,这是一个受保护的目录,您需要在它前面加上 sudo
,它是“superuser do”的缩写。然后会要求您输入密码。
所以完整的命令是:
$ sudo mkdir -p /data/db
我在现有的 Mongodb 设置中遇到了这个问题。我仍然不确定它为什么会发生,但由于某种原因,Mongod 进程找不到 mongod.config 文件。因为它找不到配置文件,所以它试图在 /data/db 中找到数据库文件,这是一个不存在的文件夹。但是,配置文件仍然可用,因此我确保该进程对配置文件具有权限,并使用 --config 标志运行 mongod 进程,如下所示:
mongod --config /etc/mongod.conf
在配置文件本身我有这个设置:
storage:
dbPath: /var/lib/mongodb
这就是进程如何再次找到真正的 DB 文件夹的方式。
我做了
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
这应该启动服务并在重新启动后重新启动它。
您正在尝试创建一个您没有 root 访问权限的目录。
为了测试 mongodb,我只使用我的用户目录中的一个目录,例如:
cd
mkdir -p temp/
mongod --dbpath .
这将从您当前的工作目录在 temp/ 中创建一个 mongo 数据库
通过使用我的窗口管理器创建 /data/db 文件夹,我解决了这个完全相同的问题。我一开始尝试通过终端进行操作,为了在根目录中创建一个文件夹,我不得不使用 sudo。
我刚刚使用 Finder 进入根目录并使用“新文件夹”创建了一个新文件夹。完全为我工作。
注意:我使用的是 OSX。
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 偶然会根据您启动服务的方式尝试访问不同的数据文件夹。
您需要在根目录(即 /)中创建 /data/db ... 一个名为 /data/ 的目录,并在其中创建一个名为 /db/ 的子文件夹 ...
您收到权限错误,因为您需要使用 sudo 在 MacOS 的根目录中创建目录,sudo 允许您以管理员身份运行命令。
所以,改为运行这个......
$ sudo mkdir -p /data/db
这将提示您输入密码,它与您用于更改系统设置的密码相同(当您尝试在 ecample 的系统偏好设置中更改内容时打开的那个小对话框),并且可能与您用于登录的密码相同。
在根目录下创建目录
sudo mkdir -p /data/db
现在更改所有者
sudo chown -R $USER /data
你可以走了!
mongod
而不是使用sudo mongod
,您不需要输入所有密码,但对于实际项目您应该使用sudo mongod
,不要将权限授予普通用户!
只是一个简短的说明:
如果您尝试在不先更改权限的情况下运行 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 来验证文件权限是否与目录权限匹配。
当我尝试启动 mongodb 时,我不断收到以下错误。
"shutting down with code:100"
我正在使用以下命令:
./mongod --dbpath=~/mongo-data
对我来说,解决方法是我不需要“=”符号,这导致了错误。所以我做了
./mongod --dbpath ~/mongo-data
只是想把它扔在那里,因为错误绝不表明这是问题所在。我几乎删除了 ~/mongo-data 目录的内容,看看是否有帮助。很高兴我记得 cli args 有时不使用“=”符号。
Mongodb 在运行 mongod
时会在设备的根文件夹中查找 ~/data/db
文件夹作为 db 的路径。
我通过运行 mkdir ~/data
创建一个 ~/data
文件夹来解决它
在根文件夹中,通过键入 ls
检查数据文件夹是否存在。然后导航到数据文件夹并仔细检查 pwd
应该给你 /Users/username/data
然后运行此命令创建一个 mongodb 数据库路径 sudo mongod --dbpath=/Users/username/data
这是为我做的,当我跑 mongod
到目前为止,我还曾经认为我们需要创建 /data/db 文件夹来启动 mongod 命令。
但是最近我尝试使用 service 命令启动 mongod,它对我有用,并且不需要创建 /data/db 目录。
service mongod start
至于检查 mongod 的状态,您可以运行以下命令。
service mongod status
这个解决方案解决了我的问题
将目录创建为 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
从 MongoDB 4.4 开始,MongoDB 数据库工具现在与 MongoDB 服务器分开发布。
您需要下载:https://www.mongodb.com/try/download/database-tools?tck=docs_databasetools
然后将所有文件复制到 /usr/bin
中,所有命令行都将可用。
在终端上输入“id”以查看您可以提供的可用用户 ID,然后只需输入
“sudo chown -R idname /data/db”
这对我有用!希望这能解决您的问题。
在 MongoDB 的最新版本中,我有 3.2.10,它默认存储到
/var/lib/mongodb
mongod --dbpath /var/lib/mongodb
会有所帮助
Tilo 的答案对我有用,直到这个:
sudo chown -R 126:135 /data/db
我不得不使用:
sudo chown -R $USER /data/db
在(重新)安装工具包后,我在 Windows 10 设备上遇到了类似的错误;
initAndListen 中的异常:NonExistentPath:数据目录 C:\data\db\ 未找到。,终止
解决方案 类似于 linux 系统的解释:只需创建文件夹即可启动 mongod.exe
(mongoDB 服务器)。
我想我可能会把它留给那些最终在 Windows 设备上使用相同搜索词的人。
有一种非常愚蠢的方法可以产生这个问题,我开创了这种方法:
1) 让你的 mongo 安装一段时间 2) 回来并且服务器没有运行 3) 尝试启动它,但这次不要使用 sudo 4) mongo 找不到 data/db/ 因为现在它正在查找用户主目录而不是 su 主目录
是的,它确实很愚蠢,但是如果您使用系统已经有一段时间了,它可能会绊倒您。
简短回答:确保使用相同的隐含主目录运行 mongo
ls -ld /data/
和ls -ld /data/db/
.. 您将看到左侧列出的目录权限,然后是所有权,然后是目录名称。您应该确保目录可由运行 MongoDB 的用户 ID 写入。invalid arguement
sudo touch /data/db/mongod.lock
和sudo chmod 0777 /data/db/mongd.lock
。她直接起身。sudo chown -R `id -u` /data/db
或sudo chown -R $USER /data/db
而不是sudo chown mongod:mongod /data/db
对我有用