SocketException:地址已在使用中MONGODB


75

我在尝试运行mongodb时发现此错误。我通过自制软件安装。请协助

Agungs-MacBook-Pro:~ agungmahaputra$ mongod
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten] MongoDB starting : pid=5189 port=27017 dbpath=/data/db 64-bit host=Agungs-MacBook-Pro.local
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten] db version v3.6.0
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten] git version: a57d8e71e6998a2d0afde7edc11bd23e5661c915
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.2n  7 Dec 2017
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten] allocator: system
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten] modules: none
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten] build environment:
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten]     distarch: x86_64
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten]     target_arch: x86_64
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten] options: {}
2017-12-26T15:31:15.911+0700 E STORAGE  [initandlisten] Failed to set up listener: SocketException: Address already in use
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten] now exiting
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten] shutting down with code:48
Agungs-MacBook-Pro:~ agungmahaputra$

Answers:


90

您已经在所27017使用的端口中运行了一个进程mongodb。因此,您需要在该端口中停止该进程,或者尝试使用其他端口号。

尝试 mongod --port 27018

您可以更改选择的端口号。

编辑:

您也可以使用sudo killall mongod@Dassi Orleando在评论中提到的来停止mongo服务器的所有正在运行的实例 。然后跑mongod


10
好的答案,我们实际上可以通过点击命令来关闭前一个mongo实例sudo killall mongod
Dassi Orleando

116

您可以杀死以前的mongod实例并启动新实例。

要杀死先前的mongod实例,请先输入以下内容来搜索计算机上运行的任务列表:

sudo lsof -iTCP -sTCP:LISTEN -n -P

搜索mongod COMMAND及其PID和类型,

sudo kill <mongo_command_pid>

现在,通过键入启动您的mongod实例,

mongod

您可以看到MongoDB成功运行。


2
为我工作!好答案!
Iegor Benzyk

2
可能需要进行修改才能在PC上运行,但对于Mac,这是完美的。TNX

1
就我而言,(Centos 7 Mongo 4.0.10)运行的服务是实际的mongo守护程序,将其杀死只是造成了另一个问题。只需使用“ mongo”命令代替“ mongod”
Roy Toledo

这个答案比公认的答案好得多
serdarsenay

惊人的答案。希望我能两次投票赞成你。:)
AllJs

6

如果您使用的是mongodb版本4. *

在默认设置中,应该有一个具有必要权限的“ db”文件夹“ / data / db”。

检查它,MongoDB服务是否启动

brew services list

如果没有,则运行

brew services start mongodb

运行mongo而不是mongod


谢谢。就我而言(Centos 7 Mongo 4.0.10)就这样。
罗伊·托莱多

6

总结other(@Tony Roczz@Balasubramani M)对这里的回答:

根本原因

错误: Failed to set up listener: SocketException: Address already in use

手段:

  • 以前已经运行过mongodb
    • 可能使用默认端口27017

(大多数情况下)杀死并重启 mongod

杀死蒙哥

两种方法:

  • 使用killall
    • killall mongod
  • 被PID杀死
    • 查找mongod PID
      • 方法1: ps aux | grep mongod
      • 输出可以看到像这样: limao 425 ... /usr/local/opt/mongodb-community/bin/mongod --config /usr/local/etc/mongod.conf
      • 方法2: lsof -iTCP -sTCP:LISTEN -n -P
      • 输出可以看到像这样: mongod 425 limao .. TCP 127.0.0.1:27017 (LISTEN)
    • 被PID杀死: kill -9 425

重新启动mongod

  • 大多数情况: mongod
  • 一些特殊情况
    • brew services start mongodb-community
      • 在Mac中通过以下方式安装社区版本: brew install mongodb-community

(对于某些人)与另一个端口一起运行

  • 用另一个端口运行: mongod --port 27018
    • 适用于那些想同时运行多个mongod服务器的用户

附加说明

正在运行的mongodb使用哪个端口?

 lsof -iTCP -sTCP:LISTEN -n -P
COMMAND     PID  USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
mongod      425 limao   10u  IPv4 0xab744305e75263cf      0t0  TCP 127.0.0.1:27017 (LISTEN)

可以看到27017当前正在运行的mongodb端口。

如何检查/确保mongod正在运行

  • 检查mongod状态:
    • ps aux | grep mongod
      • 输出可以看到mongod服务
    • brew services list
      • 如果安装brew并通过brew

4

首先,使用以下命令关闭正在运行的服务器:

mongod --shutdown

然后运行:

sudo mongod

4

我解决了将以下命令粘贴到命令行中的问题,以关闭mongo的服务器。

sudo pkill -f mongod

“ sudo”(超级用户权限)运行命令admin权限,因此它将要求您输入用户密码


4

在下面运行此命令后:

sudo lsof -iTCP -sTCP:LISTEN -n -P

搜索mongod COMMAND及其PID和类型,

sudo kill <mongo_command_pid>

重新启动mongod仍然失败,并显示相同的错误“ SocketException:地址已在使用MONGODB”。

服务器昨天重新启动,然后发生了这种情况。


1

确保错误在于端口,如果使用macos catalina,则报告了〜/ data / db问题,这也可能导致此问题。


是的,我遇到了一个问题,我肯定mongo没有运行但仍然出现此错误
Dylan

1

如果您的mongod进程已经关闭,只需删除/ tmp中的.sock文件:

我的mongod已经关闭,因此不会出现在:

lsof -iTCP -sTCP:LISTEN -n -P

错误是:

[root@ol7db19c1 ~]# mongod -f /etc/csrs_2.conf
about to fork child process, waiting until server is ready for connections.
forked process: 6721
ERROR: child process failed, exited with error number 48
To see additional information in this output, start without the "--fork" option.

在日志文件(/var/mongodb/db/csrs2.log)中:

2020-07-05T16:03:59.354-0300 E  STORAGE  [initandlisten] Failed to set up listener: SocketException: Address already in use

因此,找到套接字锁定:

ls -ltra /tmp|grep .sock

只需删除它(在生产环境中谨慎操作):

rm -f mongodb-26002.sock

祝你好运!


0

仅此一条命令

sudo pkill -f mongod


1
与《阿古斯丁·玛丽》的答案相同。除非您的答案是在命令前使用粗体。
Scratte

0

这听起来似乎很明显,但是您应该检查mongodb是否已在运行。因此,与其首先通过运行来启动数据库,不如:

sudo mongod

尝试直接运行:

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.