MongoDB Linux 配置常见问题与解决
一 快速排查路径
- 查看服务状态与日志:使用命令systemctl status mongod与journalctl -xe定位失败阶段;MongoDB 的错误日志通常位于**/var/log/mongodb/mongod.log**。
- 核对配置文件:默认配置文件为**/etc/mongod.conf**,重点检查dbPath、logPath、bindIp、port、security.authorization等关键项。
- 校验目录与权限:确保数据目录(如**/var/lib/mongodb**)与日志目录(如**/var/log/mongodb**)存在且属主为mongodb:mongodb。
- 检查端口占用:确认默认端口27017未被其他进程占用。
- 资源与磁盘:排查内存/CPU不足与磁盘空间耗尽等问题。
以上步骤能覆盖大多数启动与连接异常的根因定位。
二 常见故障与修复对照表
| 症状 |
典型错误信息 |
主要原因 |
修复要点 |
| 服务启动失败 |
Job for mongod.service failed |
配置项错误、目录缺失或权限不对 |
核对**/etc/mongod.conf**;创建缺失目录并修正属主;用日志定位具体项 |
| 权限错误 |
Unable to lock file: errno:13 Permission denied |
数据/日志目录权限不足或被占用 |
chown/chmod 目录为mongodb:mongodb;排查并释放锁文件/进程 |
| 目录不存在 |
/data/db not found |
默认数据目录缺失 |
创建目录并赋权:mkdir -p /data/db && chown -R mongodb:mongodb /data/db |
| 端口冲突 |
Address already in use |
27017 被占用 |
用 netstat 查找占用进程并停止,或更改配置中的 port |
| 配置解析错误 |
Error parsing INI config file / unrecognised option |
配置项拼写/格式与版本不匹配 |
使用与当前 MongoDB 版本一致的配置语法(YAML/INI) |
| 库依赖缺失 |
mongod: error while loading shared libraries: libnetsnmpmibs.so.30 / libcurl.so.4 |
系统缺少依赖库 |
安装对应依赖包(如 libcurl4-openssl-dev 等) |
| 磁盘空间不足 |
no space left on device |
磁盘满 |
清理无用文件或将 dbPath 指向更大磁盘 |
| 连接超时 |
MongoTimeoutException |
服务未启动/网络不通/防火墙拦截 |
确认服务运行、监听正确 IP 与端口、放行防火墙 |
| 认证失败 |
Authentication failed |
未启用或未创建用户 |
在 admin 创建用户并在配置中开启 security.authorization |
以上症状与修复要点覆盖了权限、配置、端口、依赖、磁盘、网络与认证等高频场景。
三 配置与运维要点
- 配置文件与版本匹配:不同大版本的 MongoDB 对配置语法与可用选项支持不同,例如旧版 INI 中的nohttpinterface在新版本可能不被识别,需按所用版本调整配置格式与参数。
- systemd 服务示例:
- 使用前台进程:Type=simple,ExecStart 指向 mongod -f /etc/mongod.conf;无需 fork。
- 使用后台 fork:Type=forking,ExecStart 启动后 fork,ExecStop 使用 mongod --shutdown。
两种写法二选一,保持与配置文件中fork选项一致。
- 目录与权限:官方包通常使用**/var/lib/mongodb与/var/log/mongodb**,请保持属主为mongodb:mongodb,避免因权限导致启动失败。
- 远程访问:在**/etc/mongod.conf的 net 段设置bindIp: 0.0.0.0并开放防火墙27017端口;同时务必开启security.authorization: enabled**并创建管理员用户,避免暴露风险。
- 日志优先:遇到任何异常,优先查看**/var/log/mongodb/mongod.log**获取堆栈与上下文信息。
四 最小可用配置与命令清单
- 配置文件 /etc/mongod.conf(示例)
- 存储与日志
- storage.dbPath: /var/lib/mongodb
- systemLog.path: /var/log/mongodb/mongod.log
- 网络
- net.port: 27017
- net.bindIp: 127.0.0.1(如需远程改为0.0.0.0并配合防火墙)
- 安全
- security.authorization: enabled
- 常用命令
- 启动/停止/重启:systemctl start|stop|restart mongod
- 开机自启:systemctl enable mongod
- 状态与日志:systemctl status mongod;journalctl -xe;tail -f /var/log/mongodb/mongod.log
- 连接 Shell:mongosh(或 mongo,视版本而定)
- 创建管理员(启用认证后):
- use admin
- db.createUser({ user: “admin”, pwd: “StrongPass!23”, roles: [“root”] })
以上配置与命令覆盖了最小可用部署、启停管理、远程访问与安全加固的关键操作。