最近在写一个个人的网站,前端差不多了,所以这两天在搞数据库
先按官网的流程走完了,Linux主机上可以进mongo了:
然后心里想了一句这么顺利的吗,就在服务端用mongoose打算远程连一下数据库,看能不能连上。
本以为应该是秒连的,没想到过了一会给了个超时的错误:
第一反应是会不会是mongoose的配置有问题,因为主机上顺利地一批啊,就去官网看了下,加了一个配置项 socketTimeoutMS:6000000;
其实心里是觉得没什么D用的,果然,不靠谱。
然后查了一下,看有说法是需要把 mongod.conf 配置文件中的 bindIp 改成0.0.0.0:
bindIp表示的是监听的ip地址段,默认是127.0.0.1,也就是localhost,不能被外界访问到,注释掉这句代码之后默认就是监听0.0.0.0也就是全部网段,由于是在局域网环境,可以这样简单设置保存(如果设置为某个具体的ip,则只有该ip能访问)
找到mongod.conf 文件,修改bindIp字段:
重启了服务后还是不行。
后来突然一想,超时大概率是端口访问不到没开放,于是远程telnet了一下27017端口,发现连接失败了,我又跑了一下8000端口(我页面是放在这个端口的),8000端口没问题
那问题根源应该就是这个了,所以一步步开始排查:
先是在安全组里开放27017端口,再连 —— 还是不行;
lsof了一下主机的27017端口,是开放着的,那就只剩下防火墙了
firewall-cmd --query-port=27017/tcp 查看了一下,返现返回的是no,那就是被防火墙墙了,需要开个口子
firewall-cmd --permanent --add-port=27017/tcp ,进行27017端口的添加,返回了success
重启一下服务器,firewall-cmd --query-port=27017/tcp 查看一下,返回yes,开启成功
满怀激动的心情,再远程连了一下,OK,收工。
顺带一提,如果过程重碰到了重启mongod失败的错误,应该就是目录权限的问题:
跑一下这个命令就好了(原因暂时还未了解):
sudo chown mongod:mongod /tmp/mongodb-27017.sock
最后写些感想,作为一名前端,这方面一开始碰到问题的时候真的就无从下手,头皮发麻。这不像前端,可以有html页面效果反馈,也不能打开控制台打断点看看哪里出了问题
你面对的,就只有一个黑漆漆的linux命令面板,这就对排查问题的能力有了要求。
喜欢看推理小说,这就和福尔摩斯说的一样:排除了所有不可能,剩下的就是真相。