MongoDB 3.0中的“无法取消套接字文件链接”错误


72

我是MongoDB的新手。我试图在Ubuntu 13.0 LTS上安装MongoDb 3.0,Ubuntu 13.0 LTS是Windows 7主机上的VM。我已经成功安装了MongoDB(软件包等),但是当我执行命令时sudo service mongod start,在“ /var/log/mongodb/mongod.log”日志文件中收到以下错误。谁能帮助我了解此错误。互联网上与此无关。

2015-04-23T00:12:00.876-0400 I控制*****服务器重新启动***** 2015-04-23T00:12:00.931-0400 E网络[initandlisten]无法取消套接字文件/ tmp / mongodb的链接-27017.soc k errno:1不允许操作2015-04-23T00:12:00.931-0400 I-[initandlisten]致命断言28578 2015-04-23T00:12:00.931-0400 I-[initandlisten]


6
这是一个更适合DBA StackExchange的问题,但希望它应该由主持人:)移到那里。可以包含输出 ls -lat /tmp/mongodb-27017.sock吗?我怀疑您可能已经mongod以其他用户身份(也许是root用户)启动,而不是从服务(应该使用该mongodb用户)开始。您应该能够通过停止mongod服务,sudo rm /tmp/mongodb-27017.sock然后重新启动服务来解决此问题。除非您要mongod通过域套接字而不是通过TCP / IP连接进行连接,否则此处的错误是相当良性的。
Stennie 2015年

3
我已经通过删除'mongodb-27017.sock'文件来解决此问题。删除此文件后,我运行了该服务,效果很好。但是,我仍然不确定问题的根本原因。命令'ls-lat /tmp/mongodb-27017.sock'的输出为'srwx ------ 1 mongodb nogroup 0 Apr 23 06:24 /tmp/mongodb-27017.sock'。
KurioZ7 2015年

stackoverflow.com/a/38843534/1773972他们建议更改该文件的权限,并在ubuntu 16.04上进行了测试,为我工作!
Pini Cheyni '16

Answers:


141

我已经通过删除mongodb-27017.sock文件解决了这个问题。删除此文件后,我运行了该服务,效果很好。但是,我仍然不确定问题的根本原因。命令的输出ls - lat /tmp/mongodb-27017.sock现在是

srwx------ 1 mongodb nogroup 0 Apr 23 06:24 /tmp/mongodb-27017.sock

3
这对我来说暂时有用,但是似乎文件会自动重新创建。有没有人找到针对此问题的长期解决方案?在Ubuntu 14.04服务器版本上。
awimley,2016年

将这个表彰删除我的DBS
151291

尽管这可行,不是因为SELinux是在VM上实施的吗?
Prashant

另外,您必须杀死每个正在运行的mongo进程。
xpeiro

我也尝试过这样做,但是我每次都需要执行此操作。
瑞沙卜·迪曼

38

除了KurioZ7提供的答案外,您还可以简单地将.sock文件的权限设置为当前用户:

sudo chown `whoami` /tmp/mongodb-27017.sock

如果我想在不使用sudo的情况下运行mongod,那么这对我就有用。如果像KurioZ7s答案中那样删除文件,则下次重启机器时,我只会得到相同的错误。


24

当您使用命令时,会发生此问题

mongod

使用命令之前

sudo service mongod start

要解决此问题,请执行以下任一操作:

在文件上设置适当的权限:

/tmp/mongodb-27017.sock

要么

删除文件

/tmp/mongodb-27017.sock

sudo service mongod start && mongod

11

造成这种情况的最可能原因是mongod进程有时是由root用户启动的。因此,套接字文件(/tmp/mongodb-27017.sock)由root用户拥有。mongod进程通常在其自己的专用用户下运行,并且该用户没有删除该文件的权限。

您已经发现的解决方案是删除它。然后mongodb便可以使用正确的权限重新创建它。只要使用初始化脚本启动mongodb或使用正确的用户帐户,重新启动后这应该一直存在。



2

对于基于UNIX的操作系统,作为Bastronaut提供的答案的替代方案,您还可以指定.sock文件保存到mongod拥有完整用户权限(对应于您运行mongod的方式)的文件夹中。 mongod也可以在关机时删除.sock文件。.sock文件保存到的默认文件夹是'/ tmp'。要指定另一个文件夹,请使用自定义的mongodb配置文件,例如“ mongodb.conf”,然后向其中添加以下内容:

net:
  unixDomainSocket:
    pathPrefix: "anotherFolder"

之后,您可以使用以下命令运行mongod:

$ mongod --config /path/to/mongodb.conf

您可以阅读以下文档的文档:https : //docs.mongodb.org/manual/reference/configuration-options/#net.unixDomainSocket.pathPrefix


1

更改/ tmp目录中的所有权mongodb-27017.sock文件,然后再次启动mongod。

cd /tmp

sudo chown mongodb:mongodb mongodb-27017.sock
sudo systemctl start mongod

0

重新启动后手动重新启动mongod服务可解决此问题。

长期解决方案是添加静态主机名,而不是mongod.conf文件的IP地址“ net”部分(我怀疑问题是,当mongod servis启动时,尚未将IP地址提供给服务器)。

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.