如何通过MongoDB Compass连接CentOS7 VPS上的MongoDB及排查异常?
问题排查与解决方法
一、MongoDB Compass无法远程连接的原因及解决
1. 端口未对外开放
CentOS7默认防火墙(firewalld)会阻断外部对27017端口的访问,同时云服务商的安全组也可能限制端口:
- 开放防火墙端口:
firewall-cmd --add-port=27017/tcp --permanent firewall-cmd --reload - 登录云服务商控制台,在安全组规则中添加入方向的27017端口,允许所有IP或指定你的本地IP访问。
2. MongoDB绑定地址限制
默认MongoDB仅绑定127.0.0.1,仅允许本地连接:
- 编辑MongoDB配置文件(通常路径为
/etc/mongod.conf):net: bindIp: 0.0.0.0 # 改为允许所有IP访问,或指定你的本地IP port: 27017 - 重启MongoDB服务:
systemctl restart mongod
3. 未配置认证(若开启了权限验证)
如果MongoDB启用了auth选项,Compass连接时必须提供正确的用户名、密码及认证数据库(默认admin):
- 在Compass连接界面,点击「Advanced Options」,在「Authentication」标签下选择SCRAM认证方式,输入用户名、密码,认证数据库填
admin。
二、show dbs仅显示系统数据库的原因及解决
1. 当前用户权限不足
如果连接时使用的用户没有读取非系统数据库的权限,show dbs只会返回系统库:
- 切换到
admin数据库并使用有权限的用户登录:use admin db.auth("your_admin_username", "your_admin_password") - 执行
show dbs即可看到所有有权限访问的数据库。
2. 数据库未存储任何数据
MongoDB采用懒加载机制,创建数据库后若未插入任何数据,不会在show dbs中显示:
- 切换到目标数据库并插入一条测试数据:
use your_database_name db.test_collection.insertOne({key: "value"}) - 再次执行
show dbs即可看到该数据库。
3. 连接时指定了空数据库
如果mongosh连接时指定了一个未存储数据的数据库,默认不会显示在show dbs中,只需切换到admin数据库或插入数据即可解决。
内容的提问来源于stack exchange,提问作者MN A
相关产品推荐
相关产品推荐

