百思不得其解的 MongoDB 问题:服务正常,但连接不上

2021-09-17 10:17:54 +08:00
 hvboekml

我有个网站用的是 MongoDB 数据库,搞不懂的地方在于网站正常,但是 mongo 连不上。

最近没动过配置,不敢贸然重启服务,求教下各位

7060 次点击
所在节点    MongoDB
25 条回复
Jooooooooo
2021-09-17 10:29:53 +08:00
网站正常说明 db 没问题, 那就是你的链接方式有问题

看下是不是密码 /端口写错了, client 不兼容之类的
hvboekml
2021-09-17 10:33:11 +08:00
@Jooooooooo 早前是正常的
ElmerZhang
2021-09-17 10:46:24 +08:00
用什么连的?软件还是命令行的 mongo ?
mongo 部署在哪里?你是从哪里连过去的?家里还是同一内网中的服务器?
是报错还是卡住不动?报错的话把错误信息贴一下。
qinxi
2021-09-17 11:02:46 +08:00
原本正常,现在不行,如果没动数据库配置和代码连接配置的话, 先看看防火墙?
hvboekml
2021-09-17 11:09:29 +08:00
@ElmerZhang
@qinxi

```
# bindIp: 127.0.0.1

$ mongo
MongoDB shell version v4.4.4
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
```
用 `mongo` 卡住不动,用 `mongodump` 的话报错 `Failed: can't create session: could not connect to server: server selection error: server selection timeout, current topology`
hvboekml
2021-09-17 11:13:18 +08:00
`mongodump` 报错:Failed: can't create session: could not connect to server: server selection error: server selection timeout, current topology: { Type: Single, Servers: [{ Addr: 127.0.0.1:27017, Type: Unknown, State: Connected, Average RTT: 0, Last error: connection() : connection(127.0.0.1:27017[-13]) incomplete read of message header: read tcp 127.0.0.1:54658->127.0.0.1:27017: i/o timeout }, ] }
fkdtz
2021-09-17 11:52:23 +08:00
端口允许外网连接么,看看防火墙安全组之类的
ila
2021-09-17 12:05:29 +08:00
在 docker 容器内吗
cathiabi
2021-09-17 12:26:50 +08:00
之前 mysql 遇到类似问题,后来发现需要用 root 权限运行客户端。安全升级的缘故只让用 socket 连。。。
hvboekml
2021-09-17 14:24:17 +08:00
@fkdtz
@ila
@cathiabi 本地连的,不是 docker,试了 sudo 一样,前几天是正常的
ElmerZhang
2021-09-17 15:08:36 +08:00
@hvboekml
卡住的话首先怀疑是防火墙,但是你连的是 127.0.0.1,可以排除防火墙的原因。
`sudo netstat -nltp` 看下端口是否正常,不过你没有报 'Connection refused' 八成是开着的。

连接的时候 tail 一下 mongodb 日志和系统日志( /var/log/syslog 或者 /var/log/message ),看看有没有什么 warning, error 之类的日志吧。
ila
2021-09-17 15:42:33 +08:00
关闭掉 mongo server,在 27017 端口开启个 web 服务,能访问,排除了端口映射。
mongo 能够进入 mongodb 的 shell 。排除了 mongodb 的问题。

接下来可以锁定是网络配置了。
你在 host 这栏填写主机名,非 ip 名。
如果可以进入,那就是这个问题了。
hvboekml
2021-09-17 15:51:36 +08:00
@ElmerZhang /var/log/syslog 没看到有报错,mongodb 的日志停留在几天前,停留的那天,我部署了基于 redis 的频率限制,我在想,难道是系统问题
cathiabi
2021-09-17 15:55:42 +08:00
@hvboekml 用 telnet 连一下 27017 端口看看通不通,如果不通的话,服务是否有正常运行呢?网站正常的话不会是因为缓存了吧。
cathiabi
2021-09-17 15:57:22 +08:00
还有一个很罕见的问题是 lo 本地回环有问题
hvboekml
2021-09-17 15:57:54 +08:00
@ila 似乎只能重启了,准备今晚试试
ElmerZhang
2021-09-17 15:59:22 +08:00
@hvboekml
`sudo netstat -nltp` 还是看一下端口吧
`ps aux | grep mongod` 看一下进程状态
ila
2021-09-17 16:01:55 +08:00
@hvboekml 你试了连接这个吗?
mongodb://<服务器主机名>:27017
hvboekml
2021-09-17 16:04:39 +08:00
@cathiabi 网站试了可以读写
```
$ telnet 127.0.0.1 27017
Trying 127.0.0.1...
Connected to 127.0.0.1.
```
hvboekml
2021-09-17 16:11:02 +08:00
@ElmerZhang
```
$ sudo netstat -nltp
tcp 2088 0 127.0.0.1:27017 0.0.0.0:* LISTEN 3204/mongod

$ ps aux | grep mongod
mongodb 3204 0.5 13.2 2073556 532464 ? Ssl Mar22 1412:17 /usr/bin/mongod --config /etc/mongod.conf
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/802474

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX