查看服务器上MongoDB端口号,最直接的办法是查看配置文件中的port参数,或者通过mongo shell连接后执行db.getSiblingDB(“admin”).runCommand({whatsmyuri:1})查询当前实际端口。默认情况下MongoDB使用27017端口,但生产环境中经常被修改,下文详细拆解几种验证方法,以及查到了却连不上时的排查思路。
mongodb默认端口是多少?先搞清楚这个数字
行业共识认为,MongoDB未修改配置时默认监听27017端口,这个端口号对应mongod服务的标准入口,绝大多数云服务器上的MongoDB部署都沿用这个设定,但有一个细节容易忽略:同一台服务器上运行多个MongoDB实例时,每个实例的端口必然不同,否则会冲突报错。
默认端口只在配置文件未被改动时成立,实际工作中运维人员出于安全考虑,经常把端口改成类似27018、27019这类高位端口,甚至使用非默认的5位数端口。“默认27017”只能作为初始判断依据,不能替代实际查询。
MongoDB分片集群中mongos路由进程默认监听27017,而shard节点和config server默认分别使用27018和27019,这种情况在早期版本中尤为常见,如果你管理的是集群环境,查询端口时需要区分进程角色。
mongo数据库端口号怎么查看?三招见效
第一招:从配置文件里翻出端口参数
MongoDB的启动参数通常写在mongod.conf中,这是最权威的端口来源,配置文件默认位置在/etc/mongod.conf,但通过源码编译或自定义安装时可能放在/usr/local/mongodb等目录下。
查找步骤如下:
- 使用
ps -ef | grep mongod查看进程启动命令 - 如果启动命令里有
-f /path/to/config,后面的路径就是配置文件位置 - 打开配置文件,搜索
port:或net.port字段 - 如果没有显式配置port,说明使用默认值27017
一个容易踩坑的地方是配置文件里存在port: 0的情况。port设置为0表示让MongoDB随机分配可用端口,此时配置文件里的数字不具备参考意义,必须用下面两种方法实际探测。
第二招:mongo shell里让它自报家门
启动mongo shell客户端连接目标服务器,输入以下命令直接获取当前会话所用的端口:
db.getSiblingDB("admin").runCommand({whatsmyuri: 1})
返回结果中you字段的值形如168.1.10:27017,冒号后面的数字就是实际端口,这条命令的优势在于它绕过了配置文件,读取的是实际运行状态,即使端口被随机分配也能查出来。
如果不想进shell,也可以直接执行客户端命令带上--port参数试探,但这只能验证某个具体端口是否开放,无法得知真实端口号。
第三招:linux查看mongodb端口的系统命令
在服务器终端上,不需要登录mongo也能查端口,Linux下用ss或netstat查看监听状态:
ss -tlnp | grep mongod
或者
netstat -tlnp | grep 27017
输出结果中0.0.0:27017或0.0.1:27017前面的IP和端口组合,表示mongod正在监听的地址和端口,对比以下情况:
| 监听地址 | 含义 |
|---|---|
| 0.0.0:27017 | 允许所有IP通过27017访问,常见于云服务器 |
| 0.0.1:27017 | 仅本机可访问,外部连接会被拒绝 |
| 168.x.x:27017 | 绑定内网IP,仅内网可达 |
使用lsof -i -P | grep mongod也能达到类似效果,但在文件描述符较多的服务器上输出速度较慢。
推荐优先使用ss命令,它在现代Linux发行版中是默认安装的,而且查询速度明显快于netstat。
查到了端口却连不上?问题多半出在这几处
确认端口号之后,客户端依旧连接超时或拒绝访问,这是排查MongoDB时最常见的困境,业内专家指出,端口本身监听正常并不代表外部能顺利访问,至少有三个层面需要验证。
防火墙规则拦截了入站流量
云服务商的安全组策略优先级最高,在简米云、酷番云等平台上,安全组规则通常需要单独添加TCP端口放行,如果服务器防火墙是firewalld,执行以下命令放行端口:
firewall-cmd --zone=public --add-port=27017/tcp --permanent
firewall-cmd --reload
使用iptables的场景则需添加对应的INPUT链规则,特别提示:修改防火墙后建议立即用telnet验证端口通断,命令格式为telnet 服务器IP 端口号。
mongo配置里绑定了不合适的IP地址
配置文件中的bindIp参数决定了mongod监听哪些网络接口,如果设置为0.0.1,意味着只接受本机回环连接,外部请求即使端口开放也会被拒绝,以下配置同时允许本机和内网访问:
net:
bindIp: 127.0.0.1,192.168.1.10
port: 27017
注意修改bindIp后必须重启mongod服务才能生效,有些版本的MongoDB默认绑定localhost,这会导致远程客户端始终无法连接。
连接字符串的host参数写错
即便端口无误,MongoDB连接串中host段错误同样会导致失败,正确的连接串格式为:
mongodb://用户名:密码@服务器IP:27017/admin
其中端口必须放在host冒号之后、路径之前,使用公网IP连接时,还需要确认mongod绑定的IP确实包含公网地址,或者通过内网IP转发访问。
修改端口号前先想清楚这几件事
部分场景下需要自定义端口号,比如多实例共存、安全策略硬性要求等,修改mongod端口并不复杂,但有些细节一直被忽略。
修改配置后重启是必然步骤
调整net.port参数后,执行systemctl restart mongod或mongod -f /etc/mongod.conf重新启动进程。注意观察日志中是否有Port绑定失败的信息,如果出现address already in use,说明目标端口已被其他进程占用。
客户端和应用程序需要同步更新
端口一旦变化,所有依赖旧端口连接的应用程序连接串都要改。これは包括后端服务的环境变量、数据库管理工具的连接配置,以及定时备份脚本中的连接参数,建议修改前先梳理出所有使用该MongoDB的服务清单,避免遗漏导致业务中断。
考虑安全组与访问控制的联动
端口修改后,原有的安全组策略和防火墙规则都需同步更换,一些企业内部的漏洞扫描系统可能对特定端口有合规要求,替换端口前最好确认一下是否符合运维规范。
MongoDB端口相关常见问题解答
mongod启动时怎么指定非默认端口?
启动命令中添加--port参数即可:mongod --port 27018 --dbpath /data/db,这种方式适合临时测试,重启后失效,持久化配置仍推荐写入mongod.conf文件。
连接mongo时如何确认自己连的是哪个端口?
在mongo shell中执行db.getMongo(),返回结果包含服务器地址和端口信息,格式为服务器IP:端口号。
端口27017在云服务器上总是被扫描攻击怎么办?
将mongod端口改为高位随机端口,在安全组中仅放行可信IP的入站流量,并为MongoDB开启认证机制,端口隐藏不是最终解决方案,认证和网络白名单才是防护根本。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/728920.html





