Ubuntu 上 MongoDB 连接问题的排查与修复
一 快速自检
- 确认服务是否运行:sudo systemctl status mongod;若未运行:sudo systemctl start mongod,并设置开机自启:sudo systemctl enable mongod。
- 本机直连测试:mongo --host localhost --port 27017。
- 监听与连通性:ss -lntp | grep 27017 或 sudo lsof -iTCP:27017 -sTCP:LISTEN;远程测试:nc -vz 服务器IP 27017。
- 防火墙与云安全组:sudo ufw allow 27017;如使用云服务器,确保安全组放行入站 27017。
- 日志定位:sudo tail -n 100 /var/log/mongodb/mongod.log。
以上步骤能快速判断是否为服务未启动、端口未监听、网络被拦截或配置不当引起的问题。
二 常见场景与对应修复
-
服务未启动或崩溃
现象:mongo 提示“ couldn’t connect to server 127.0.0.1:27017 ”。
处理:启动服务并检查状态;若反复崩溃,查看日志定位根因(如配置、权限、磁盘等)。
命令:sudo systemctl start mongod;sudo systemctl status mongod;sudo tail -n 100 /var/log/mongodb/mongod.log。
-
仅本地可连、远程被拒绝
现象:本机能连,远程连不通或报“connection refused”。
处理:
- 修改配置 /etc/mongod.conf,将 net.bindIp 设为 0.0.0.0(或注释掉 bindIp 行),并确认 port 27017;
- 重启服务:sudo systemctl restart mongod;
- 开放防火墙与云安全组 27017。
命令示例:
sudo sed -i ‘s/^bindIp:.*/bindIp: 0.0.0.0/’ /etc/mongod.conf
sudo systemctl restart mongod
sudo ufw allow 27017
注意:开放到 0.0.0.0 需配合鉴权与网络安全策略。
-
异常关机或数据文件异常导致无法启动
现象:服务起不来或启动即退出。
处理(先备份数据目录):
- 停止服务:sudo systemctl stop mongod;
- 删除锁文件:sudo rm -f /var/lib/mongodb/mongod.lock;
- 以 mongodb 用户执行修复:sudo -u mongodb mongod -f /etc/mongod.conf --repair;
- 重新启动:sudo systemctl start mongod。
说明:以正确用户执行修复可避免后续权限错误。
-
套接字文件残留导致启动失败
现象:日志出现 “Failed to unlink socket file … Operation not permitted”。
处理:
- 停止服务:sudo systemctl stop mongod;
- 删除旧套接字:sudo rm -f /tmp/mongodb-27017.sock;
- 再启动:sudo systemctl start mongod。
-
启用了鉴权但连接被拒绝或无权限
现象:能连上但认证失败或没有库级权限。
处理:
- 本地先无鉴权连入:mongo --host localhost --port 27017;
- 切换到 admin 创建管理员并授予角色:
use admin
db.createUser({user:“admin”,pwd:“强密码”,roles:[“root”]})
- 在目标库创建业务用户并授予权限:
use mydb
db.createUser({user:“app”,pwd:“密码”,roles:[“readWrite”]})
- 远程连接串示例:mongodb://app:密码@服务器IP:27017/mydb。
三 配置与网络要点
- 配置文件路径:/etc/mongod.conf;关键项:
- net.bindIp:0.0.0.0(允许远程,生产请配合安全策略)
- net.port:27017
- storage.dbPath:/var/lib/mongodb
- systemLog.path:/var/log/mongodb/mongod.log
- security.authorization:enabled(开启鉴权)
- 修改后重启:sudo systemctl restart mongod;用 ss -lntp | grep 27017 确认监听地址为 0.0.0.0:27017。
- 防火墙与云安全组需放行 27017,否则远程会被拒绝。
四 最小化连通性测试清单
- 本机:mongo --host 127.0.0.1 --port 27017
- 远程:mongo --host 服务器IP --port 27017
- 端口探测:nc -vz 服务器IP 27017
- 监听检查:ss -lntp | grep 27017
- 日志排查:sudo tail -n 100 /var/log/mongodb/mongod.log
以上命令能快速判定是网络、端口、服务还是鉴权问题。