【问题标题】:Problem using and running brew services start mongodb-community@4.2使用和运行 brew services start mongodb-community@4.2 出现问题
【发布时间】:2020-09-22 20:04:02
【问题描述】:

我有 MacOs Catalina 版本 10.15.5,我按照他们的网站 https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/ 上指示的步骤使用 Homebrew 安装了 mongoDB。当我检查我的 mongoDB 是否正确安装时,我使用 which mongo 命令并得到 /usr/local/bin/mongo 响应。当我使用 mongo --versionmongod --version 时,我得到:

MongoDB shell version v4.2.7
git version: 51d9fe12b5d19720e72dcd7db0f2f17dd9a19212
allocator: system
modules: none
build environment:
    distarch: x86_64
    target_arch: x86_64

db version v4.2.7
git version: 51d9fe12b5d19720e72dcd7db0f2f17dd9a19212
allocator: system
modules: none
build environment:
    distarch: x86_64
    target_arch: x86_64

我认为这意味着它已正确安装并且应该可以工作。

但是当我打开终端并按照网站上的指示运行命令 brew services start mongodb-community@4.2 时,我得到:

Error: undefined method `resolve_alias' for Formula:Class
/usr/local/bin/brew-services.rb:154:in `service'
/usr/local/bin/brew-services.rb:203:in `check'
/usr/local/bin/brew-services.rb:193:in `run!'
/usr/local/bin/brew-services.rb:397:in `<top (required)>'
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/usr/local/Homebrew/Library/Homebrew/utils.rb:81:in `require?'
/usr/local/Homebrew/Library/Homebrew/brew.rb:112:in `<main>'

注意:我的 brew 更新升级成功!

我在互联网上搜索了任何解决方案,但我找不到任何解决问题的方法...如果有人遇到过类似的问题,请逐步解释并详细说明您是如何解决的?!?!

如果我直接运行命令mongod 我得到:

2020-06-04T01:19:41.351+0200 I  CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
2020-06-04T01:19:41.355+0200 W  ASIO     [main] No TransportLayer configured during NetworkInterface startup
2020-06-04T01:19:41.355+0200 I  CONTROL  [initandlisten] MongoDB starting : pid=24712 port=27017 dbpath=/data/db 64-bit host=Air-de-Ruslan.home
2020-06-04T01:19:41.355+0200 I  CONTROL  [initandlisten] db version v4.2.7
2020-06-04T01:19:41.355+0200 I  CONTROL  [initandlisten] git version: 51d9fe12b5d19720e72dcd7db0f2f17dd9a19212
2020-06-04T01:19:41.355+0200 I  CONTROL  [initandlisten] allocator: system
2020-06-04T01:19:41.355+0200 I  CONTROL  [initandlisten] modules: none
2020-06-04T01:19:41.355+0200 I  CONTROL  [initandlisten] build environment:
2020-06-04T01:19:41.355+0200 I  CONTROL  [initandlisten]     distarch: x86_64
2020-06-04T01:19:41.355+0200 I  CONTROL  [initandlisten]     target_arch: x86_64
2020-06-04T01:19:41.355+0200 I  CONTROL  [initandlisten] options: {}
2020-06-04T01:19:41.355+0200 E  NETWORK  [initandlisten] Failed to unlink socket file /tmp/mongodb-27017.sock Permission denied
2020-06-04T01:19:41.355+0200 F  -        [initandlisten] Fatal Assertion 40486 at src/mongo/transport/transport_layer_asio.cpp 684
2020-06-04T01:19:41.355+0200 F  -        [initandlisten] 

***aborting after fassert() failure

如果我直接运行命令mongo 我得到:

MongoDB shell version v4.2.7
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
2020-06-04T01:21:20.317+0200 E  QUERY    [js] Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed: SocketException: Error connecting to 127.0.0.1:27017 :: caused by :: Connection refused :
connect@src/mongo/shell/mongo.js:341:17
@(connect):2:6
2020-06-04T01:21:20.320+0200 F  -        [main] exception: connect failed
2020-06-04T01:21:20.320+0200 E  -        [main] exiting with code 1

【问题讨论】:

    标签: database mongodb macos homebrew


    【解决方案1】:

    已解决

    我必须使用命令删除 /usr/local/bin/brew-services.rb

    rm /usr/local/bin/brew-services.rb 它可以请求权限,所以添加 sudo rm /usr/local/bin/brew-services.rb.

    之后我尝试运行 brew services start mongodb-community@4.2 并得到了

    Successfully started mongodb-community (label: homebrew.mxcl.mongodb-commu 但是当我从不同的终端输入mongo 来启动我得到的shell Socket exception errorso 我也检查了 mongod.log 文件,发现这是一个套接字问题,所以我尝试了

    ls -ls /tmp/mongodb-27017.sock 我得到了

    0 srwx------ 1 root root 0 June 04 14:51 /tmp/mongodb-27017.sock 这意味着所有者是 root 并且 mongodb 无法访问它所以我做了

    sudo rm -rf /tmp/mongodb-27017.sock

    删除文件,然后用

    重新启动 mongodb

    brew services start mongodb-community@4.2 创建了新的 .sock 文件,其所有者直接是 mongodb 或实际用户 whoami 当我再次检查时

    ls -lsah /tmp/mongodb-27017.sock

    我证明我是所有者,然后我可以打开新终端并运行 mongo 并启用连接并使用 shell!

    【讨论】:

      【解决方案2】:

      在 macos Big Surmongodb-community@5.0.1 上测试

      如果您使用自制软件并升级到mongodb-community@5.0,则在启动 mongodb-community 服务时可能会遇到错误。

      使用rm -rf /usr/local/var/mongodb 删除以前的dbpath 文件夹(如果存在),然后使用cd /usr/local/var &amp;&amp; mkdir mongodb 再次创建它。

      然后brew services start mongodb-community 应该可以正常工作。

      【讨论】:

        【解决方案3】:

        在 MacOS Big Sur 上(针对 mongodb-community@5.0 测试),以下总是返回错误(这意味着 mongodb-community 服务将自动加载):

        ~ brew services start mongodb-community
        
        mongodb-community error zaffer /Users/zaffer/Library/LaunchAgents/homebrew.mxcl.mongodb-community.plist
        

        默认情况下 mongodb-community 配置存储在/usr/local/etc/mongod.conf

        默认情况下dbpath参数设置为/usr/local/var/mongodb

        分析日志发现问题多与/usr/local/var/mongodb这个文件夹的权限有关

        以下对我有用:

        ~ cd /usr/local/var/mongodb
        ~ sudo chown -R $(whoami) .
        ~ cd ..
        ~ sudo chown -R $(whoami) mongodb
        ~ brew services restart mongodb-community
        

        如果还是遇到问题,建议更改此文件夹下所有文件的文件权限(/usr/local/var/mongodb):

        ~ chmod -R 777 /usr/local/var/mongodb
        ~ brew services restart mongodb-community
        

        如果权限被拒绝,则使用 sudo

        ~ sudo chmod -R 777 /usr/local/var/mongodb
        ~ brew services restart mongodb-community
        

        如果您仍然遇到问题,请在使用以下方法之一将 mongod 作为后台进程运行时观察错误:

        ~ mongod
        ~ mongod --dbpath /usr/local/var/mongodb
        ~ mongod --config /usr/local/etc/mongod.conf
        

        从较低版本的 mongodb-community 升级时,您也可能会遇到问题,例如。从 3.6 升级到 5.0,就我而言,我倾向于保存现有数据库,否则我可以为 mongodb 数据创建一个新文件夹,并更新 /usr/local/etc/mongod.conf 配置文件中的 dbpath。

        推荐的方法是进行增量升级,即从 3.6 升级到 4.0,然后从 4.0 升级到 4.4,然后从 4.4 升级到 5.0。它的作用是为将数据从一个版本迁移到另一个版本设置推荐的兼容性版本。您可以使用 mongodb shell 手动设置兼容性版本(为此,您需要一个工作的 mongodb 服务器):

        > db.adminCommand( { setFeatureCompatibilityVersion: <version> } )
        

        文档链接:https://docs.mongodb.com/manual/reference/command/setFeatureCompatibilityVersion/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-05-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-11
          • 1970-01-01
          • 2017-06-15
          相关资源
          最近更新 更多