百思不得其解的 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
感觉免不了要中断服务,我准备先试下关掉新功能
说是对第三方硬盘兼容性更差了 实质上不允许第三方硬盘,以后对于群晖这个品牌将不予理会 这是什么产品策略,太不靠谱了 直接拉黑, 不用再看了 925 详情页面 拉…
1.只推荐 Android ,不推荐苹果 现在生活在国外,国内 app (例如微信、银行、支付等)一周最多只会用一次。已经有一个 iPhone XR ,这部手机打算专门用来装国…
全文译自墙外文章“NoSQL Data Modeling Techniques”,译得不好,还请见谅。这篇文章看完之后,你可能会对NoSQL的数据结构会有些感觉。我的感觉是,关…