Ubuntu上的MongoDB不会作为服务启动,日志中没有任何东西
我在Ubuntu上运行MongoDB 2.2,如果我运行:
sudo mongod
我得到一个错误,它无法find/数据/数据库,这不是数据库的地方。 在mongod.conf中,数据库path被指定为数据库所在的Ubuntu 10gen default /var/lib/mongodb
。 看起来像mongod
没有findconf文件。 所以当我运行时:
sudo mongod -f /etc/mongodb.conf
服务器启动正常,输出logging到日志文件: /var/log/mongodb/mongodb.log
。 一切都很开心 我可以切换到另一个shell,login到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
“testing”不是正确的数据库,并且日志文件中不显示任何内容。
我不知道什么是错的。 我检查了新贵脚本,他们似乎很好。 /etc/init/mongodb.conf
运行:
mongodb --exec /usr/bin/mongod -- --config /etc/mongodb.conf
好的,这一切归结为权限,但让我们一步一步来。 当你运行sudo mongod
它根本不会加载configuration文件,它实际上是从默认编译开始的 – 端口27017 ,/ data / db的数据库path等 – 这就是为什么你得到了无法find的错误该文件夹。 只有在configuration文件中指定“Ubuntu默认”时(如果你开始使用服务命令,这是在幕后完成的)。
接下来你是这样运行的:
sudo mongod -f /etc/mongodb.conf
如果之前没有问题,那么现在就会有 – 你已经用正常的configuration(指向你通常的dbpath和日志)以root用户身份运行进程。 这意味着现在在正常的MongoDB文件夹中会有多个文件,其中包含root:root
用户:group。
当您尝试以普通服务的forms再次启动它时,这将导致错误,因为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
),尽pipe最好用ls -al
或类似的validation来确认。 一旦完成,你应该能够得到服务,再次成功启动。
首先确认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
要closuresMongoDB,请进入Mongo CLI,访问pipe理员并发出关机命令:
$ ./mongo
>使用pipe理员
> db.shutdownServer()
参考: http : //www.mongodb.org/display/DOCS/Starting+and+Stopping+Mongo
我也有同样的问题。 所以我去了cd / var / lib / mongodb /并删除了mongod.lock文件然后它为我工作。
没有为我工作,然后我发现这是/tmp
目录上的权限问题:
sudo chmod 1777 /tmp sudo chown root:root /tmp
上面的答案都没有为我工作。 我终于通过debugginginit脚本来了解它:
sudo bash -x /etc/init.d/mongodb start
看到它传递错误的configurationpath到mongod。 我只是将/etc/init.d/mongodb中的行从“CONF = / etc / mongodb.conf”更改为“CONF = /etc/mongod.conf”。 版本2使用前者,安装版本3使用新格式添加/etc/mongod.conf,但显然没有更新init脚本。
更新:我现在有一个很奇怪的问题,初始化脚本的工作,但只有当我运行“sudo bash -x /etc/init.d/mongodb start”而不是“sudo service mongodb start”。 同样的事情停止。
根据@nelsonic的build议检查数据,日志和日志文件夹中的所有权限后,我的问题是通过授予/ tmp文件夹中文件的权限
sudo chown mongod:mongod mongodb-27017.sock
我正在将其作为AWS Amazon Linux实例运行。 我想通过执行下面的mongod用户,然后研究错误代码。 这可能对其他疑难解答有用。
sudo -S -u mongod mongod -f /etc/mongod.conf
上述答案都没有为我工作,删除我的日志文件带来了Mongo的生活。
最近这个错误可能会发生,如果你已经更新mongod,你正在运行和旧的数据库。 Mongod将默认使用wiredTiger引擎,您将拥有一个mmapv1数据库
编辑/etc/mongod.conf中的引擎设置
# engine: wiredTiger engine: mmapv1
小心 – YAML是空白敏感的
journalctl / systemd不会看到这个问题。 检查/var/log/mongodb/mongod.log中的mongod日志
我认为你可以转换数据库像这里概述的步骤
https://docs.mongodb.com/manual/tutorial/change-standalone-wiredtiger/
试试这个命令:
sudo chown mongodb /tmp/mongodb-27017.sock