Debian 上 MongoDB 常见问题与排查手册
一 快速定位与通用排查
- 服务状态与日志
- 查看服务:sudo systemctl status mongod
- 实时日志:sudo tail -f /var/log/mongodb/mongod.log
- 常见根因:配置路径错误、目录权限不足、端口被占用
- 连接与网络
- 本机连通:mongo --host 127.0.0.1:27017
- 远程连通:mongo --host <服务器IP>:27017(确保网络与防火墙放行)
- 监听地址:检查 /etc/mongod.conf 中 net.bindIp,远程访问需设置为 0.0.0.0(或指定内网网段),并开放防火墙端口 27017
- 性能与健康
- 实时监控:mongostat、mongotop
- 查询诊断:db.collection.explain(“executionStats”).find(…)
- 慢查询:开启 Profiling 或设置阈值记录慢操作,用于定位慢查询与缺失索引
二 高频问题与对策
- 服务无法启动
- 查看日志定位错误:cat /var/log/mongodb/mongod.log
- 核对配置:/etc/mongod.conf 中 storage.dbPath、systemLog.destination、net.port 等路径与权限
- 权限修复:chown -R mongodb:mongodb /var/lib/mongodb /var/log/mongodb
- 重新加载并启动:sudo systemctl daemon-reload && sudo systemctl restart mongod
- Connection refused
- 确认服务运行:systemctl is-active mongod
- 核对监听端口与地址:netstat -tulpen | grep 27017;bindIp 是否允许来源 IP
- 防火墙放行:sudo ufw allow 27017/tcp 或对应防火墙策略
- 权限与认证失败
- 启用安全:/etc/mongod.conf 中 security.authorization: enabled
- 创建管理员:use admin → db.createUser({user:“admin”, pwd:“StrongPass!”, roles:[{role:“root”,db:“admin”}]})
- 客户端连接:mongo --host 127.0.0.1:27017 -u admin -p --authenticationDatabase admin
- Write concern failed
- 副本集/分片状态异常:rs.status()、sh.status()
- 检查网络与节点健康,必要时调整 writeConcern 或恢复副本同步
- No Server Chosen by ReadPreference
- 核对读取偏好 ReadPreference 与副本集拓扑是否匹配
- 客户端/驱动版本与服务端兼容,必要时升级驱动
- 查询慢
- 使用 explain 分析执行计划,添加合适索引,避免全表扫描
- 开启慢查询日志或 Profiling,定位高成本操作并优化
三 配置与优化要点
- 基础配置
- 数据目录:storage.dbPath
- 日志目录:systemLog.destination
- 监听端口与地址:net.port、net.bindIp(远程访问设为 0.0.0.0)
- 安全加固
- 启用认证:security.authorization: enabled
- 创建最小权限用户,按库/集合分配角色
- 性能调优
- WiredTiger 缓存:storage.wiredTiger.engineConfig.cacheSizeGB(依据内存与业务权衡)
- 连接数:net.maxIncomingConnections(避免过大导致资源争用)
- 慢查询与 Profiling:设置阈值记录慢操作,或在库级启用 profiling 分析热点
- 监控:定期使用 mongostat、mongotop 观察插入/查询/更新/删除速率与耗时
四 安装与源配置纠偏
- 使用官方仓库安装(示例)
- 导入公钥:wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
- 添加源(以 Debian 10 Buster 为例):echo “deb [arch=amd64,arm64] https://repo.mongodb.org/apt/debian buster/mongodb-org/6.0 multiverse” | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
- 安装与启动:sudo apt update && sudo apt install -y mongodb-org;sudo systemctl start mongod && sudo systemctl enable mongod
- 常见安装报错与修复
- E: Unable to locate package mongodb-org:源未正确配置或版本不匹配,核对 OS 代号与仓库路径
- apt-key 相关错误:安装 gnupg 后重试导入公钥
- 包名错误:Debian 官方仓库包名为 mongodb-org,不要使用 universe 中的 mongodb 包
五 一键排查命令清单
- 服务与日志:systemctl status mongod;tail -f /var/log/mongodb/mongod.log
- 端口与连通:ss -lntp | grep 27017;mongo --host 127.0.0.1:27017
- 副本集/分片:rs.status();sh.status()
- 性能与慢查询:mongostat;mongotop;db.collection.explain(“executionStats”).find(…);db.setProfilingLevel(1,200)
- 权限与认证:use admin;db.auth(“admin”,“pwd”);db.createUser(…)