我有MacOS Catalina版本10.15.5,我按照他们网站上指示的步骤安装了mongoDB,https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/使用Homebrew。当我检查我的mongoDB是否正确安装时,我使用which mongo
命令并得到/usr/local/bin/mongo
响应。当我使用mongo --version
和mongod --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
已解决
我不得不使用命令删除/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
来启动外壳时,我得到了Socket exception error
所以我也检查了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!
在 macOSBig Sur
和mongodb-community@5.0.1
上进行测试
如果您使用的是自制软件并升级到mongodb-community@5.0
,则在启动mongodb社区服务时可能会遇到错误。
使用rm -rf /usr/local/var/mongodb
删除以前的 dbpath 文件夹(如果存在(,然后使用cd /usr/local/var && mkdir mongodb
再次创建它。
那么brew services start mongodb-community
应该可以正常工作。
在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社区配置存储在/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社区升级时,您也可能会遇到问题,例如从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/