我今天第一次使用我的新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
谢谢大家!
答案 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)
输入" id"在终端上查看您可以提供的可用用户ID, 然后只需输入
即可" sudo chown -R idname / data / db"
这对我来说很有用! 希望这可以解决您的问题。
答案 22 :(得分:0)
尝试启动mongodb时,我不断收到以下错误消息。
"shutting down with code:100"
我正在使用以下命令:
./mongod --dbpath=~/mongo-data
对我来说,解决方法是我不需要“ =”符号,这会导致错误。所以我做了
./mongod --dbpath ~/mongo-data
只是想把它扔在那里,因为错误绝不表明这是问题所在。我几乎删除了〜/ mongo-data目录的内容,以查看是否有帮助。很高兴,我记得cli参数有时不使用“ =”符号。
答案 23 :(得分:0)
此解决方案解决了我的问题
将目录设为
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
答案 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