安装MongoDB(子进程失败,以错误编号100退出)

28

我尝试在我的MacBook Air上安装MongoDB。

我从官方网站下载了压缩文件并解压缩,然后将该文件移动到根目录下。 接着,在该目录下,我创建了 /data/db 和 /log 文件夹。

这是描述我的数据库基本配置的 mongodb.config 文件。

dbpath = /mongodb/data/db
logpath = /mongodb/log/mongo.log
logappend = true
#bind ip = 127.0.0.1
port = 27017

fork = true
rest = true
verbose = true
#auth = true
#noauth = true
此外,我想了解配置文件中的#代表什么意思。
我将此文件放置在/mongodb/bin文件夹中,/mongodb是我提取文件的目录。
我打开终端并输入./mongod --config mongodb.config,然后我得到了这个返回结果。
Juneyoung-ui-MacBook-Air:bin juneyoungoh$ ./mongod --config mongodb.config
about to fork child process, waiting until server is ready for connections.
forked process: 1775
all output going to: /mongodb/log/mongo.log
ERROR: child process failed, exited with error number 100

我该如何处理这个错误,它的含义是什么?


1
# 开始一个 注释。在一行中 # 之后的任何内容都将被忽略。 - Joe Frambach
1
你能否发布一下 /mongodb/log/mongo.log 的内容?(如果有的话) - shelman
@shelman 谢谢你的询问。但是现在我的mongodb正常工作了。-_-^ 我不知道发生了什么。而且日志太长了,无法在这里粘贴。无论如何,再次感谢 :D - Juneyoung Oh
10个回答

35

你创建的数据文件夹很可能是用 sudo 创建的,对吗?它们属于 root,并且不能被你的普通用户写入。如果你是你的MacBook唯一的用户,那么将目录的所有权更改为你自己:

sudo chown juneyoungoh /data
sudo chown juneyoungoh /data/db
sudo chown juneyoungoh /data/log

如果您计划在公共机器或合法的地方进行安装,那么请在其他地方了解有关Mongo安全实践的更多信息。我只会帮您在Macbook上运行。


谢谢您的回复。但是它没有起作用。就像下面这样,我已经拥有这些目录和文件。\nJuneyoung-ui-MacBook-Air:mongodb juneyoungoh$ ls-l总共120-rw-r--r--@ 1 juneyoungoh staff 34520年3月23日05:09 GNU-AGPL-3.0-rw-r--r--@ 1 juneyoungoh staff 1359年3月23日05:09 README-rw-r--r--@ 1 juneyoungoh staff 18436年3月23日05:09 THIRD-PARTY-NOTICESdrwxr-xr-x@ 18 juneyoungoh staff 612 4月12日13:37 bin drwxr-xr-x 3 juneyoungoh staff 102 4月11日14:53 config drwxr-xr-x 10 juneyoungoh staff 340 4月11日14:28 data drwxr-xr-x 3 juneyoungoh staff 102 4月11日14:53 log - Juneyoung Oh
那看起来不像是在 / 上的 ls 命令。那是 ~ 吗? - Joe Frambach
谢谢。我不知道为什么,但现在它可以工作了。我什么都没做。也许是“chown”命令改变了一些东西。感谢您的友善和明智的回答。 :D - Juneyoung Oh
如果该进程已经启动,MongoDB 将会拒绝启动,我猜是因为它将覆盖 root 已经拥有的文件。因此,在重新启动之前,他应该清除目录(dbpathlogpath)。 - user12582392

14

我遇到了类似的问题,但与任何“sudo”问题无关。我试图从内核崩溃中恢复!

当我查看我的数据文件夹时,发现有一个mongod.lock文件。在我这种情况下,这个页面帮助了我很多:http://docs.mongodb.org/manual/tutorial/recover-data-following-unexpected-shutdown/。正如他们所解释的那样,

如果mongod.lock不是零字节文件,则mongod将拒绝启动。

我在我的环境中测试了这个解决方案,并且它完美地运作:

  1. 删除 mongod.lock 文件。
  2. 修复数据库:mongod --dbpath /your/db/path --repair
  3. 运行mongod:mongod --dbpath /your/db/path

只需检查mongod.lock文件大小是否为0字节,删除它,重新启动服务,一切都完美工作,干杯! - user1900121
好帖子伙计! - user12582392

9
我的电脑也遇到了同样的问题。日志文件中显示:
Mon Jul 29 09:57:13.689 [initandlisten] ERROR: Insufficient free space for journal file Mon Jul 29 09:57:13.689 [initandlisten] Please make at least 3379MB available in /var/mongoexp/rs2/journal or use --smallfiles
通过使用命令mongod --smallfiles解决了这个问题。或者,如果您使用--config选项启动mongod,则可以在配置文件中通过nojournal=true(删除开头的#)禁用预写日志功能。增加一些磁盘空间也可以解决上述问题。

4
这是因为你可能没有正确地关闭mongodb,也没有以正确的方式启动mongodb。根据你的mongodb.config,你有dbpath = /mongodb/data/db - 所以我假设你创建了存储库/mongodb/data/db?让我澄清所有步骤。
  1. 启动MongoDB

在你的mongodb.config中将dbpath = /mongodb/data/db更改为dbpath = /data/db。在你的终端中输入mkdir /data/db创建数据库存储库。现在你有一个存储库 - 你可以启动你的mongo。

要在后台启动mongo,请输入:mongod --dbpath /data/db --fork --logpath /dev/null

  • /data/db是数据库的位置。
  • --fork表示你想要在后台运行mongo守护进程。
  • --logpath /dev/null表示你不想记录日志 - 你可以通过将/dev/null替换为路径(例如/var/log/mongo.log)来更改这个设置。

    1. 关闭MongoDB

通过输入mongouse admindb.shutdownServer()连接到你的mongo。就像在MongoDB中解释的那样。

如果出现问题,这种技术不起作用,你可以随时杀死进程。

通过输入lsof -i:27017查找mongodb进程的PID,假设你的mongodb运行在端口27017上。

输入kill <PID>,将<PID>替换为你在之前的命令中找到的数值。


3

有一个类似的问题,出现了相同的错误 - 我试图运行修复脚本

sudo -u mongodb mongod -f /etc/mongodb.conf --repair

使用 ps aux | grep mongo 命令检查守护进程是否在运行。停止它后,修复脚本就能够正常运行。

希望这对其他人有所帮助。


1
在Mac OS X上使用Homebrew MongoDB时,我不得不使用mongod -f /usr/local/Cellar/mongodb/2.4.6/mongod.conf --repair(请检查您的版本,2.4.6可能不适用于您)。这解决了我的问题。谢谢。 - three

2
我在Linux(Centos)上遇到了同样的错误,并且以下操作对我有效:
1.从dbpath中删除mongod.lock ``` $ rm /var/lib/mongo/mongod.lock ```
2.修复mongod进程 ``` $ mongod --repair ```
3.运行mongod配置 ``` $ mongod --config /etc/mongod.conf ```

是的,我必须执行第一步,然后删除 /tmp/mongodb-27017.sock。 - Bill

0

我遇到了相同的错误。我以交互方式运行它以查看日志。

2014-10-21T10:12:35.418-0400 [initandlisten] ERROR: listen(): bind() failed errno:48 Address already in use for socket: 0.0.0.0:27017

然后我使用了 lsof 命令来查找正在使用我的端口的进程。

$ lsof -i:27017
COMMAND  PID     USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
mongod  2106 MYUSERID   10u  IPv4 0x635b71ec3b65b4a1      0t0  TCP *:27017 (LISTEN)

这是我之前分叉过并忘记关闭的mongod(因为我在bash窗口中没有看到它在运行)。 通过运行kill 2106来终止它,使我的进程能够在避免出现错误100的情况下运行。


0
通常,当mongod.conf文件无法找到某个路径以用于数据库存储、日志存储或进程ID存储时,就会出现此错误。或者可能是因为它没有获得访问mongod.conf中声明的配置目录和文件的文件权限。
要解决此错误,我们需要观察MongoDB生成的日志,它将清楚地指示MongoDB无法访问哪个文件或目录。
上述错误可能看起来像下面的屏幕截图 enter image description here

enter image description here


感谢回复旧帖。在我发这个问题的时候,我对Linux还很陌生,不知道要如何处理“权限被拒绝”的问题。实际解决方案是使用“chown”,但你的答案展示了如何使用日志跟踪错误。 - Juneyoung Oh
如果您只是在本地机器上进行练习,请使用以下命令更改目录权限。 - Narendra Maru
您可以使用以下命令更改目录的权限:chmod -R 777 /var/mongoprocess-R选项将递归地更改所有文件和目录的权限。 - Narendra Maru

0
创建一个名为"data"和"db"的文件夹,并将其放置在服务器的"/"路径下。 实际上,您应该创建或修改存储数据的文件夹的权限!

0
我的问题是我虚拟机的空间不够了。不得不删除一些旧的镜像,问题就解决了。
我的日志中有这个记录。
...
fatal log failure: No space left on device
...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接