百思不得其解的 MongoDB 问题:服务正常,但连接不上
我有个网站用的是 MongoDB 数据库,搞不懂的地方在于网站正常,但是 mongo 连不上。
最近没动过配置,不敢贸然重启服务,求教下各位
感谢各位,重启服务后解决了
网站正常说明 db 没问题, 那就是你的链接方式有问题
看下是不是密码 /端口写错了, client 不兼容之类的
早前是正常的
用什么连的?软件还是命令行的 mongo ?
mongo 部署在哪里?你是从哪里连过去的?家里还是同一内网中的服务器?
是报错还是卡住不动?报错的话把错误信息贴一下。
原本正常,现在不行,如果没动数据库配置和代码连接配置的话, 先看看防火墙?
# 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
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 }, ] }
端口允许外网连接么,看看防火墙安全组之类的
在 docker 容器内吗
之前 mysql 遇到类似问题,后来发现需要用 root 权限运行客户端。安全升级的缘故只让用 socket 连。。。
本地连的,不是 docker,试了 sudo 一样,前几天是正常的
卡住的话首先怀疑是防火墙,但是你连的是 127.0.0.1,可以排除防火墙的原因。sudo netstat -nltp
看下端口是否正常,不过你没有报 'Connection refused' 八成是开着的。
连接的时候 tail 一下 mongodb 日志和系统日志( /var/log/syslog 或者 /var/log/message ),看看有没有什么 warning, error 之类的日志吧。
关闭掉 mongo server,在 27017 端口开启个 web 服务,能访问,排除了端口映射。
mongo 能够进入 mongodb 的 shell 。排除了 mongodb 的问题。
接下来可以锁定是网络配置了。
你在 host 这栏填写主机名,非 ip 名。
如果可以进入,那就是这个问题了。
/var/log/syslog 没看到有报错,mongodb 的日志停留在几天前,停留的那天,我部署了基于 redis 的频率限制,我在想,难道是系统问题
用 telnet 连一下 27017 端口看看通不通,如果不通的话,服务是否有正常运行呢?网站正常的话不会是因为缓存了吧。
还有一个很罕见的问题是 lo 本地回环有问题
似乎只能重启了,准备今晚试试
sudo netstat -nltp
还是看一下端口吧ps aux | grep mongod
看一下进程状态
你试了连接这个吗?
mongodb://<服务器主机名>:27017
网站试了可以读写
$ telnet 127.0.0.1 27017
Trying 127.0.0.1...
Connected to 127.0.0.1.
$ 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
试了 mongo,一样
我记得 mongo 连上 mongod 之后,会先执行一些初始化 shell 的命令,比如 listDb 之类的,很可能是卡在这里了。
你会不会写脚本?用 nodejs/php/python 之类的写个简单的连接脚本,看能不能连上去。
如果能连上去的话,给脚本中加一个 currentOp 的输出。然后执行 mongo 去连接,趁它卡住时,执行一下脚本看看当前都有什么 op 在执行。
python2,确认装了 pymongo,执行这几条看看
from pymongo import MongoClient
client = MongoClient(host="127.0.0.1")
db = client.mydb
print db.current_op(True)
查查防火墙,wireshark 抓包看看
Server selection timed out after 30000 ms
感觉免不了要中断服务,我准备先试下关掉新功能
按照 Andoroid 的升级进度,应该再过 10 年就可以达到 iOS 级别的隐私体验了。 Android 13 again has “privacy and securit…
家里老人爱拍小朋友的视频,经常抱怨手机空间不足, 所以想组建一个家用的云,但各种 XX 云产品太多不知道如何选择 有谁用过对于手机相册备份比较友好的产品或文案?求推荐 我的需求…
有没有公司的产品是基于多家公有云的。一家云出了问题,可以平滑切换到其他云计算厂商?感觉现在一家云厂商出故障,都只能干着急。那我如果不差钱,同时买多家的云产品,a 有问题,我可以…