MongoDB无法启动

23

我使用Mac Homebrew命令安装了MongoDB,但当我运行mongod时,它在终端上没有被识别:/

如果我输入export PATH=$PATH:/usr/local/mongodb/bin 然后运行mongod 它会启动但很快就退出了。

mongod --help for help and startup options
Sun Jan 20 18:59:25 [initandlisten] MongoDB starting : pid=59800 port=27017 dbpath=/data/db/ 64-bit host=Kevin-Tucks-MacBook-Pro.local
Sun Jan 20 18:59:25 [initandlisten] db version v2.0.4, pdfile version 4.5
Sun Jan 20 18:59:25 [initandlisten] git version: 329f3c47fe8136c03392c8f0e548506cb21f8ebf
Sun Jan 20 18:59:25 [initandlisten] build info: Darwin erh2.10gen.cc 9.8.0 Darwin Kernel Version 9.8.0: Wed Jul 15 16:55:01 PDT 2009; root:xnu-1228.15.4~1/RELEASE_I386 i386 BOOST_LIB_VERSION=1_40
Sun Jan 20 18:59:25 [initandlisten] options: {}
Sun Jan 20 18:59:25 [initandlisten] journal dir=/data/db/journal
Sun Jan 20 18:59:25 [initandlisten] recover : no journal files present, no recovery needed
Sun Jan 20 18:59:25 [initandlisten] preallocateIsFaster=true 2.38
Sun Jan 20 18:59:25 [websvr] ERROR: listen(): bind() failed errno:48 Address already in use for socket: 0.0.0.0:28017
Sun Jan 20 18:59:25 [websvr] ERROR:   addr already in use
Sun Jan 20 18:59:25 [initandlisten] ERROR: listen(): bind() failed errno:48 Address already in use for socket: 0.0.0.0:27017
Sun Jan 20 18:59:25 [initandlisten] ERROR:   addr already in use
Sun Jan 20 18:59:25 [initandlisten] now exiting
Sun Jan 20 18:59:25 dbexit: 
Sun Jan 20 18:59:25 [initandlisten] shutdown: going to close listening sockets...
Sun Jan 20 18:59:25 [initandlisten] shutdown: going to flush diaglog...
Sun Jan 20 18:59:25 [initandlisten] shutdown: going to close sockets...
Sun Jan 20 18:59:25 [initandlisten] shutdown: waiting for fs preallocator...
Sun Jan 20 18:59:25 [initandlisten] shutdown: lock for final commit...
Sun Jan 20 18:59:25 [initandlisten] shutdown: final commit...
Sun Jan 20 18:59:25 [initandlisten] shutdown: closing all files...
Sun Jan 20 18:59:25 [initandlisten] closeAllFiles() finished
Sun Jan 20 18:59:25 [initandlisten] journalCleanup...
Sun Jan 20 18:59:25 [initandlisten] removeJournalFiles
Sun Jan 20 18:59:25 [initandlisten] shutdown: removing fs lock...
Sun Jan 20 18:59:25 dbexit: really exiting now

我已经尝试过重启shell,但是如果我再次尝试运行mongod,它会返回未识别,并要求我重新输入export PATH=$PATH:/usr/local/mongodb/bin


1
已经有其他程序在使用Mongo要使用的端口。可能是之前的Mongo实例正在运行。请使用netcat或类似工具来查找该进程的PID。 - madhead
我对netcat不是很熟悉,但我尝试了netstat并且得到了以下输出:netstat -an | grep 27017 tcp4 0 0 127.0.0.1.27017 . LISTEN
84de1dfcd2270d97 stream 0 0 84de1dfcd318fb37 0 0 0 /tmp/mongodb-27017.sock
- Keva161
你尝试启动Mongo客户端连接到本地主机了吗?也许mongod已经启动,你只需要连接它。 - James Gan
该输出实际上告诉您mongodb已经在运行,请尝试运行控制台并连接。 - Sammaye
其他海报是正确的 - 您很可能已经在27017上运行了另一个mongod。 ps -ef | grep mongod 显示什么? - geakie
7个回答

80

Kyle: "看起来Mongo已经在运行,或者另一个进程正在使用端口27017"

在这种情况下,请键入以下命令

ps wuax | grep mongo

你应该看到类似这样的东西

User           31936   0.5 0.4 2719784 35624   ?? S     7:34pm   0:09.98 mongod
User           31945   0.0 0.0 2423368   184 s000 R+   8:24pm   0:00.00 grep mongo
现在输入mongod实例的kill命令(在本例中为31936):
kill 31936

1
不得不使用 "sudo kill pid" - user3681587
大多数解决此问题的答案都缺少了这一部分,谢谢! - jagershark

4

我刚在OSX(10.9.3)上安装了brew和mongod(2.6.1),也遇到了同样的问题。绝不是运行了第二个副本。

$ lsof -i | grep 2701 

未发现任何开放端口。

我发现以下内容有所帮助。

brew 写入的默认配置文件 (/usr/local/etc/mongod.conf) 包含以下行:

bind_ip = 127.0.0.1,<my-machine>.local

如果您编辑此文件并将该行更改为以下任一行:
如果你編輯這個文件並將該行更改為下列任何一個:
bind_ip = 127.0.0.1
or
bind_ip = <my-machine>.local

然后使用以下命令重新启动服务,它应该会按预期启动。

$ brew services restart mongodb

在启动时,您可以在另一个窗口中跟踪日志文件的内容以检查成功或失败。

$ tail -f /usr/local/var/log/mongodb/mongo.log 

看起来它正在尝试打开此处列出的两个地址,它们都解析为 127.0.0.1,因此当它尝试打开第二个端口时我们总是会遇到失败并关闭整个程序。


3

错误:Sun Jan 20 18:59:25 [websvr] 错误:地址已在使用中 Sun Jan 20 18:59:25 [initandlisten] 错误:listen():bind()失败 errno:48 套接字的地址0.0.0.0:27017已经在使用中 Sun Jan 20 18:59:25 [initandlisten] 错误:地址已在使用中

看起来mongo已经在运行或另一个进程正在使用端口27017


1
这个解决方案对我有用。我使用的是MongoDB 3.2版本。
我将路径设置为,
/usr/local/bin

我把MongoDB数据目录设置为/data/db并将权限设置为我的账户。这个tutorial来自mkyong真的很有帮助。

1

对于任何来到这里的人,这个问题已经解决了(至少在我的端上),方法是停止正在运行的mongodb服务:

brew services stop mongodb

然后再运行mongod


0

如果mongod不在您的PATH中,看起来支持它的逻辑已经自版本以来进行了几次调整。如果您升级,那个问题可能会自动解决。

正如其他人已经说过的那样,它给出的错误表明另一个进程已经在使用配置的端口。可能的一种情况是,在过去,您运行了Homebrew向您呈现的命令以将MongoDB安装为LaunchAgent。如果是这种情况,此命令应撤消该操作,允许您从命令行启动它。

launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist


我尝试了那个命令,但是出现了错误:“launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist launchctl: Couldn't stat("/Users/Keva161/Library/LaunchAgents/homebrew.mxcl.mongodb.plist"): No such file or directory nothing found to unload”看起来它会在我不想要的时候自动运行服务器 :/ 有没有办法关闭它? - Keva161
听起来你可能已经将Mongo安装为服务,但不在那个位置。Mac OS X没有特别好的UI来管理LaunchAgents/LaunchDaemons。"man launchctl"会帮助你使用命令行方式。Lingon(目前售价$5)是一个GUI应用程序,用于管理它们,使其更容易。http://www.peterborgapps.com/lingon/ - davidmc24

0

如果您配置了自动启动,则不允许终止进程,因此请删除锁定文件并进行修复(mac osx)。

 cd /data/db
 rm mongod.lock
 sudo mongod --repair

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