【问题标题】:'Failed to unlink socket file" error in MongoDB 3.0MongoDB 3.0 中的“无法取消链接套接字文件”错误
【发布时间】:2015-07-01 01:26:53
【问题描述】:

我是 MongoDB 的新手。我正在尝试在 Ubuntu 13.0 LTS 上安装 MongoDb 3.0,它是 Windows 7 主机上的虚拟机。我已经成功安装了 MongoDB(包等),但是当我执行命令 sudo service mongod start 时,在“/var/log/mongodb/mongod.log”日志文件中出现以下错误。谁能帮我理解这个错误。互联网上没有与此相关的内容。

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

【问题讨论】:

  • 这是一个更适合 DBA StackExchange 的问题,但希望它应该由版主移到那里:)。你能包括ls -lat /tmp/mongodb-27017.sock的输出吗?我怀疑您可能已经以其他用户(可能是 root)的身份开始 mongod,而不是从服务开始(应该使用 mongodb 用户)。您应该能够通过停止mongod 服务sudo rm /tmp/mongodb-27017.sock,然后再次启动该服务来解决此问题。这里的错误是相当良性的,除非您想通过域套接字而不是通过 TCP/IP 连接连接到mongod
  • 我自己解决了这个问题,删除了 'mongodb-27017.sock' 文件。删除此文件后,我运行了该服务,效果很好。但是,我仍然不确定问题的根本原因。命令'ls - lat /tmp/mongodb-27017.sock'的输出是'srwx------ 1 mongodb nogroup 0 Apr 23 06:24 /tmp/mongodb-27017.sock'。
  • stackoverflow.com/a/38843534/1773972 他们建议更改该文件的权限,并在 ubuntu 16.04 上测试并为我工作!

标签: mongodb ubuntu-13.04


【解决方案1】:

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

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

【讨论】:

  • 这暂时适用于我,但似乎该文件会自动重新创建。有没有人找到这个问题的长期解决方案?在 Ubuntu 14.04 服务器版上。
  • 这个推荐会删除我的数据库
  • 虽然这样可行,但不也是因为在 VM 上强制执行了 SELinux 吗?
  • 此外,你必须杀死每个运行的 mongo 进程。
  • 我也尝试过这样做,但我每次都需要执行此操作。
【解决方案2】:

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

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

如果我想在没有 sudo 的情况下运行 mongod,这对我有用。如果我像 KurioZ7s 回答中那样删除文件,下次重新启动机器时,我只会得到同样的错误。

【讨论】:

  • 与@KurioZ7 的答案相比,这是更好的答案,因为它提供了永久修复!
【解决方案3】:

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

正如您已经发现的那样,解决方案是删除它。然后 mongodb 能够使用正确的权限重新创建它。只要使用初始化脚本或在正确的用户帐户下启动 mongodb,这应该在重新启动后持续存在。

【讨论】:

    【解决方案4】:

    对于基于 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

    【讨论】:

      【解决方案5】:
      $ sudo mongod
      

      它为我解决了问题

      【讨论】:

        【解决方案6】:

        使用命令时会出现此问题

        mongod
        

        使用命令之前

        sudo service mongod start
        

        要解决此问题,可以:

        对文件设置适当的权限:

        /tmp/mongodb-27017.sock
        

        删除文件

        /tmp/mongodb-27017.sock
        

        运行

        sudo service mongod start && mongod
        

        【讨论】:

        • 什么是适当的权限?所有者和组应该是谁?
        • 你拯救了我的一天,格雷格·米勒。
        【解决方案7】:

        更改/tmp目录下的mongodb-27017.sock文件的所有权,重新启动mongod。

        cd /tmp
        
        
        sudo chown mongodb:mongodb mongodb-27017.sock
        
        sudo systemctl start mongod
        

        【讨论】:

        • Mongo 日志显示“fassert() 失败后中止”并且服务没有启动,所以我尝试了这个解决方案,它成功了。
        • 这行得通!我不得不清除、重新安装、重新运行,然后执行此操作,但现在我们很好!
        【解决方案8】:

        重启后手动重启mongod服务解决了这个问题。

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

        【讨论】:

          【解决方案9】:

          如果您在使用 docker 时遇到此问题,请参考以下问题:

          MongoDB docker container “Failed to unlink socket file”

          【讨论】:

            猜你喜欢
            • 2021-06-26
            • 1970-01-01
            • 2016-02-03
            • 2021-04-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-06-20
            • 2010-09-05
            相关资源
            最近更新 更多