MongoDB无法正常工作。“错误:dbpath(/ data / db)不存在。”


71

当我尝试在终端中运行“ mongod”时,出现以下错误。我尝试卸载,重新安装和重新启动计算机。关于如何使其工作的任何建议都将是惊人的。

错误:

dbpath (/data/db) does not exist.
 Create this directory or give existing directory in --dbpath.
 See http://dochub.mongodb.org/core/startingandstoppingmongo

旁注:在出现此错误的同时,Node也停止了在我的计算机上工作。

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: failed to connect to [localhost:27017]

任何帮助将非常感激!


4
您是否遵循错误消息中的指示?
JohnnyHK 2014年

Answers:


186

这应该可以确保目录设置在正确的位置,以便Mongo可以找到它:

sudo mkdir -p /data/db/

sudo chown `id -u` /data/db


6
太好了,但是这是怎么回事?
纽约市技术工程师

26
mkdir创建一个目录,mongo会在该目录中存储其数据。-p允许您在一行中创建目录和子目录。(如果没有-p,如果目录'data'还不存在,则会出现错误。)第二行设置权限,以便mongo可以写入该目录。(“ chown”更改文件的所有者-CHange OWNer。)
lpappone

2
很抱歉这个愚蠢的问题,但是更改目录的所有者又意味着什么呢?我的意思是...您在哪里指定mongo可以在该目录上写?
安德烈·佩纳

@andrapena您使用户成为目录的所有者。用户生成的每个进程(包括mongodb)都将具有与用户相同的权限。在此之前,您没有这些权限,因此必须使用它sudo来创建目录-sudo意味着您以root用户身份执行以下命令,该用户具有对系统的完全访问权限。
Nearoo

但是“ id -u”是什么意思?谁应该是“ data / db”目录的所有者?
Kokodoko


7

我用以下方法解决了问题:

sudo mongod --dbpath=/var/lib/mongodb 然后mongo访问mongodb Shell。


2

更改新数据目录的用户:

chown mongodb [rute_directory]

然后尝试再次启动mongo服务

服务蒙古开始

我用这个解决了同样的问题。


1

守护程序(通常以d结尾)通常作为服务启动。启动服务(守护程序)将使mongodb能够按设计工作(如果与您的发行版很好地集成,则无需更改权限)。我使用名为mongodb的服务而不是直接启动mongod来启动它-在发行版上使用systemd enable在启动时运行,然后运行:

sudo systemctl enable mongodb    
sudo systemctl start mongodb

或者,与新贵发行版(如果你的/ etc / INIT)或init(如果你有/etc/init.d中)(https://www.tecmint.com/systemd-replaces-init-in-linux/)而是运行:

sudo service mongodb enable
sudo service mongodb start

如果您使用rc(“运行命令”)发行版,例如Gentoo(/etc/init.d中的设置)(https://forums.gentoo.org/viewtopic-t-854138-start-0.html), :

rc-update add mongodb default 
/etc/init.d/mongodb start 

在仍然具有rc的FreeBSD的发行版/版本中(检查您的版本是否切换到systemd,否则请参见下文):

  • 将以下行添加到/etc/rc.conf中:

    mongod_enable =“是”

  • 然后:

    sudo service mongod start

启动服务后,非特权用户可以使用mongo,并且每个用户将拥有单独的数据。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.