mongodb - MongoDB:无法从远程机器连接
问题描述
这里可能是重复的,但无法找到正确的答案,因此提出了这个问题。
所以,我mongodb
在我的本地机器上有一个设置,说M1
mongo 服务在哪里运行并且 db 有一些数据。
现在,我想在其他机器上使用 mongo 客户端连接到这个 mongodb,M2
但不能。
按照所有答案,我尝试M2
在文件中添加地址,mongodb.conf
但没有运气。
net:
bindIp: [m2.some.valid.ip,127.0.0.1]
我什至尝试给予,0.0.0.0
但仍然没有运气。使用 localhost,我可以从我自己的机器上连接,但是如果我提到M1
地址并在本地尝试使用该地址,我会得到
Cannot connect to Mongo DB at M1 address, network is unreachable.
我在这里卡了很长时间。刚开始mongodb
对任何新手问题都非常抱歉。
我所有的 mongo 服务都已启动并正在运行,并且能够使用终端或本地主机上的任何 mongo 客户端访问数据。
mongod
这是我在终端上运行命令时的日志:
2018-09-11T11:14:13.977+0530 I CONTROL [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
2018-09-11T11:14:13.993+0530 I CONTROL [initandlisten] MongoDB starting : pid=11307 port=27017 dbpath=/data/db 64-bit host=DELC02S5E2CG8WN.sea.corp.expecn.com
2018-09-11T11:14:13.993+0530 I CONTROL [initandlisten] db version v4.0.2
2018-09-11T11:14:13.993+0530 I CONTROL [initandlisten] git version: fc1573ba18aee42f97a3bb13b67af7d837826b47
2018-09-11T11:14:13.993+0530 I CONTROL [initandlisten] allocator: system
2018-09-11T11:14:13.993+0530 I CONTROL [initandlisten] modules: none
2018-09-11T11:14:13.993+0530 I CONTROL [initandlisten] build environment:
2018-09-11T11:14:13.993+0530 I CONTROL [initandlisten] distarch: x86_64
2018-09-11T11:14:13.993+0530 I CONTROL [initandlisten] target_arch: x86_64
2018-09-11T11:14:13.993+0530 I CONTROL [initandlisten] options: {}
2018-09-11T11:14:13.993+0530 I STORAGE [initandlisten] Detected data files in /data/db created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'.
2018-09-11T11:14:13.993+0530 I STORAGE [initandlisten] wiredtiger_open config: create,cache_size=7680M,session_max=20000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),statistics_log=(wait=0),verbose=(recovery_progress),
2018-09-11T11:14:14.698+0530 I STORAGE [initandlisten] WiredTiger message [1536644654:698414][11307:0x7fff8fb43380], txn-recover: Main recovery loop: starting at 2/7040
2018-09-11T11:14:14.792+0530 I STORAGE [initandlisten] WiredTiger message [1536644654:792304][11307:0x7fff8fb43380], txn-recover: Recovering log 2 through 3
2018-09-11T11:14:14.856+0530 I STORAGE [initandlisten] WiredTiger message [1536644654:856010][11307:0x7fff8fb43380], txn-recover: Recovering log 3 through 3
2018-09-11T11:14:14.904+0530 I STORAGE [initandlisten] WiredTiger message [1536644654:904754][11307:0x7fff8fb43380], txn-recover: Set global recovery timestamp: 0
2018-09-11T11:14:15.037+0530 I RECOVERY [initandlisten] WiredTiger recoveryTimestamp. Ts: Timestamp(0, 0)
2018-09-11T11:14:15.103+0530 I CONTROL [initandlisten]
2018-09-11T11:14:15.103+0530 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2018-09-11T11:14:15.103+0530 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2018-09-11T11:14:15.103+0530 I CONTROL [initandlisten]
2018-09-11T11:14:15.103+0530 I CONTROL [initandlisten] ** WARNING: This server is bound to localhost.
2018-09-11T11:14:15.103+0530 I CONTROL [initandlisten] ** Remote systems will be unable to connect to this server.
2018-09-11T11:14:15.103+0530 I CONTROL [initandlisten] ** Start the server with --bind_ip <address> to specify which IP
2018-09-11T11:14:15.103+0530 I CONTROL [initandlisten] ** addresses it should serve responses from, or with --bind_ip_all to
2018-09-11T11:14:15.103+0530 I CONTROL [initandlisten] ** bind to all interfaces. If this behavior is desired, start the
2018-09-11T11:14:15.103+0530 I CONTROL [initandlisten] ** server with --bind_ip 127.0.0.1 to disable this warning.
2018-09-11T11:14:15.103+0530 I CONTROL [initandlisten]
2018-09-11T11:14:15.157+0530 I FTDC [initandlisten] Initializing full-time diagnostic data capture with directory '/data/db/diagnostic.data'
2018-09-11T11:14:15.161+0530 I NETWORK [initandlisten] waiting for connections on port 27017
mongodb 版本是db version v4.0.2
并且正在使用 mac。
另外,当我绑定M2
机器的 ip 并执行 amongo --host m2.address
时,我得到了这个:
mongo --host m2.address
MongoDB shell version v4.0.2
connecting to: mongodb://m2.address:27017/
2018-09-11T11:31:07.186+0530 E QUERY [js] Error: couldn't connect to server m2.address:27017, connection attempt failed: SocketException: Error connecting to m2.address:27017 :: caused by :: Connection refused :
connect@src/mongo/shell/mongo.js:257:13
@(connect):1:6
exception: connect failed
更新
这些是我在尝试连接之前执行的步骤:
- 启动
mongodb
服务:brew services start mongodb mongod
从运行命令开始mongod
0.0.0.0
使用 Robo3T 通过指定连接地址来创建连接。也试过具体地址。- 全部给出“网络无法访问”错误。
让我知道是否在启动时缺少任何参数或者是否做错了什么。
解决方案
按照所有答案,我尝试在 mongodb.conf 文件中添加 M2 地址,但没有运气。
这是错误的。 net.bindIp
包含服务器侦听的 M1 接口列表,因此要使 M2 连接到 M1,net.bindIp 应该具有 M1 ip 地址。
另外,当我绑定我的 M2 机器的 ip 并执行 a
mongo --host m2.address
时,我得到了这个:
这是错误的。该--host
参数应具有服务器的IP地址-在您的情况下为M1。
使用 Robo3T 通过指定 0.0.0.0 创建连接
这是没有意义的。0.0.0.0
根本不是有效的 IP 地址。它可以用作 M1 上 mongodb.conf 中 net.bindIp 的通配符值,以使服务器侦听所有可用接口。Robo3T 是一个客户端,你需要给它服务器的 IP 地址才能连接到它。
在 M1(服务器)上:
- 放
net.bindIp: 0.0.0.0
- 重启 mongod
在 M2(客户端)上:
- 连接到服务器:
mongo --host m1.address
故障排除:
- 确认 mongodb 已启动并在 M1-run 命令上运行
sudo lsof -i | grep mongod
。它应该打印至少 1 个进程,例如TCP *:27017 (LISTEN)
. - 如果 p1 正常工作,请确认网络正常并且没有防火墙阻止连接 - 在 M2 上执行
telnet m1_ip 27017
它应该会给你类似Escape character is '^]'
.
推荐阅读
- java - java.time 中 Calendar.roll 的等价物是什么?
- python - 使用 NumPy 旋转 5D 立方体
- java - 我正在使用 java swing 概念。组合框的值类似于“GST 18.00%”。我只需要 (18.00) 作为浮点数。有什么办法可以完成这项任务
- c# - 如何在 Elasticsearch 中创建时间线?
- javascript - 我无法使用此 JS 代码播放音频。语法是正确的但是?
- python - 熊猫:如何根据系列模式进行分组
- javascript - 在 nuxt.config.js 中添加自定义 webpack 规则
- odoo - 如何从同一产品的 one2many 归档 basen 中的最新行中获取价值
- dvc - 在 dvc 运行的命令部分扩展环境变量
- java - 使用 FieldMethodizer 访问静态文件打印“无法为字段方法化添加 x:x”