我在Ubuntu上运行MongoDB 2.2,如果我运行:
sudo mongod
我收到一个错误,它无法找到/ data / db,这不是数据库所在的位置。在mongod.conf中,数据库路径被指定为Ubuntu 10gen的默认值/var/lib/mongodb
,这是db所在的位置。好像mongod
似乎找不到conf文件。所以,当我跑:
sudo mongod -f /etc/mongodb.conf
服务器启动正常,输出记录到日志文件:/var/log/mongodb/mongodb.log
。一切都很开心。我可以切换到另一个shell,登录mongo shell,查看数据库并运行查询。
所以,我取消了,并尝试作为服务运行:
> sudo status mongodb
mongodb stop/waiting
> sudo start mongodb
mongodb start/running, process 10468
到目前为止看起来不错,但是mongo服务器没有启动。跑另一个:
> sudo status mongodb
mongodb stop/waiting
> mongo
MongoDB shell version: 2.2.0
connecting to: test
Sat Sep 1 19:07:43 Error: couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js:91
exception: connect failed
“test”不是正确的数据库,日志文件中没有任何内容。
我对可能出错的东西感到茫然。我检查了新贵脚本,看起来很好。 /etc/init/mongodb.conf
运行:
mongodb --exec /usr/bin/mongod -- --config /etc/mongodb.conf
答案 0 :(得分:102)
好的,这一切都取决于权限,但让我们一步一步来看。当你运行sudo mongod
它根本不加载配置文件时,它实际上从编译的默认值开始 - 端口27017,{/ 3 /} / {/ / db /等等 - 这就是为什么你得到了关于无法找到该文件夹的错误。 “Ubuntu默认值”仅在您将其指向配置文件时使用(如果您开始使用服务命令,则在幕后为您完成)。
接下来你按照这样运行:
sudo mongod -f /etc/mongodb.conf
如果以前没有问题,那么现在就会有 - 您已经使用正常配置(指向通常的dbpath和日志)作为root用户运行该进程。这意味着现在将在用户正常的MongoDB文件夹中存在许多文件:root:root
组。
当您尝试再次将其作为普通服务启动时,这将导致错误,因为mongodb用户(服务将尝试运行该用户)将无权访问这些root:root
文件,最值得注意的是,它可能无法写入日志文件以提供任何信息。
因此,要将其作为普通服务运行,我们需要修复这些权限。首先,确保MongoDB当前没有以root身份运行,然后:
cd /var/log/mongodb
sudo chown -R mongodb:mongodb .
cd /var/lib/mongodb
sudo chown -R mongodb:mongodb .
应该修复它(假设用户:组是mongodb:mongodb
),尽管最好用ls -al
或类似的方式进行验证以确定。完成此操作后,您应该能够再次成功启动服务。
答案 1 :(得分:36)
首先确认 mongodb 用户/组有权写入数据目录和日志文件:
$ sudo chown -R mongodb:mongodb / var / lib / mongodb /.
$ sudo chown -R mongodb:mongodb /var/log/mongodb.log
使用以下命令启动MongoDB 作为守护程序(后台进程):
$ mongod --fork --dbpath / var / lib / mongodb / --smallfiles --logpath /var/log/mongodb.log --logappend
要Shut Down MongoDB进入Mongo CLI,请访问admin并发出shutdown命令:
$ ./mongo
>使用管理员
> db.shutdownServer()
参考:http://www.mongodb.org/display/DOCS/Starting+and+Stopping+Mongo
答案 2 :(得分:9)
我也有同样的问题。所以我去了cd / var / lib / mongodb /并删除了mongod.lock文件 然后它对我有用。
答案 3 :(得分:3)
检查@nelsonic建议的数据,日志和日志文件夹中的所有权限后,通过授予/ tmp文件夹中锁定文件的权限解决了我的问题
sudo chown mongod:mongod mongodb-27017.sock
我将其作为AWS Amazon Linux实例运行。 我通过执行下面的mongod用户计算出来,然后研究错误代码。它可能对其他故障排除很有用。
sudo -S -u mongod mongod -f /etc/mongod.conf
答案 4 :(得分:2)
没有什么对我有用,然后我发现这是/tmp
目录上的权限问题:
sudo chmod 1777 /tmp
sudo chown root:root /tmp
答案 5 :(得分:1)
上述答案都不适合我。我终于通过调试init脚本来解决它:
sudo bash -x /etc/init.d/mongodb start
看到它将错误的配置路径传递给mongod。我只是将/etc/init.d/mongodb中的行从“CONF = / etc / mongodb.conf”更改为“CONF = / etc / mongod.conf”。版本2使用前者,安装版本3使用新格式添加了/etc/mongod.conf但显然没有更新init脚本。
更新:我现在有一个更奇怪的问题,其中init脚本工作,但只有我用“sudo bash -x /etc/init.d/mongodb start”而不是“sudo service mongodb start”运行它。停止也是一样。
答案 6 :(得分:1)
试试这个命令:
sudo chown mongodb /tmp/mongodb-27017.sock
答案 7 :(得分:1)
我的mongodb是作为mongod用户从命令行启动的,而不是作为User = mongod的服务启动的。 一个小时后,检查权限,服务的定义,套接字……就是SElinux了!
在/ etc / selinux / config中,我从强制切换为宽松并重新启动。现在可以了。
答案 8 :(得分:0)
上述答案都没有对我有用,删除我的日志文件使Mongo恢复了生机。
答案 9 :(得分:0)
现在,如果您更新了mongod并且正在运行旧数据库,则可能会发生此错误。默认情况下Mongod将使用wiredTiger引擎,你将拥有一个mmapv1数据库
编辑/etc/mongod.conf中的引擎设置
# engine: wiredTiger
engine: mmapv1
小心 - YAML是空白敏感的
journalctl / systemd不会看到这个问题。检查mongod登录/var/log/mongodb/mongod.log
我认为您可以使用此处列出的步骤转换数据库
https://docs.mongodb.com/manual/tutorial/change-standalone-wiredtiger/
答案 10 :(得分:0)
还要检查您的硬盘空间,因为如果/ var / log已满,则服务将无法追加日志。