温馨提示×

Debian MongoDB常见问题及解决方法

小樊
37
2025-12-11 05:39:17
栏目: 云计算

Debian 上 MongoDB 常见问题与解决方法

一 安装与源配置问题

  • 症状:执行 sudo apt install mongodb 提示 E: Unable to locate package mongodb404 Not Found
  • 原因:未添加 MongoDB 官方 APT 源 或版本代号不匹配。
  • 解决步骤:
    1. 安装依赖:sudo apt update && sudo apt install -y apt-transport-https ca-certificates wget
    2. 导入 GPG 密钥(示例为 6.0,请按所用版本调整):
      wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
    3. 添加源(将 bullseye 替换为你的 Debian 代号,如 bookworm):
      echo “deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/debian bullseye/mongodb-org/6.0 multiverse” | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
    4. 更新并安装:sudo apt update && sudo apt install -y mongodb-org
    5. 启动与验证:sudo systemctl start mongod && sudo systemctl enable mongod;sudo systemctl status mongod;mongo --eval ‘db.runCommand({ connectionStatus: 1 })’
    6. 若之前误装了系统自带包(如 mongodb/mongodb-org 冲突),建议卸载后仅保留 mongodb-org 官方包再启动。

二 服务无法启动与崩溃排查

  • 快速定位:
    • 查看服务状态:sudo systemctl status mongod
    • 查看日志:tail -f /var/log/mongodb/mongod.log;必要时 grep 关键字(如 “ERROR”, “Fatal”)
    • 检查端口监听:ss -ltnp | grep 27017 或 netstat -anp | grep 27017
    • 检查数据目录与权限:ls -ld /var/lib/mongodb;确保 mongod 运行用户对 dbPath/logPath 有读写权限
  • 常见原因与修复:
    • 配置错误(/etc/mongod.conf 路径、端口、网络绑定等):核对配置并修正后重启
    • 数据目录不存在或权限不足:mkdir -p /var/lib/mongodb && chown -R mongodb:mongodb /var/lib/mongodb /var/log/mongodb
    • 磁盘空间不足:df -h;清理或扩容后再启动
    • 端口被占用:ss -ltnp | grep 27017 找到占用进程并处理,或调整 mongod.conf 的 net.port
    • 异常关机导致锁文件残留:确认无 mongod 进程后删除 mongod.lock,再启动(谨慎操作,先备份)
    • 升级后配置不兼容:回滚相关参数或参考官方升级指南逐步调整

三 连接与网络访问问题

  • 症状:应用或 shell 报 Connection refused、超时或仅本机能连。
  • 排查与解决:
    • 服务与端口:确认 mongod 已启动并监听 27017(ss/ netstat),如未监听检查日志与配置
    • 绑定地址:在 /etc/mongod.conf 设置 net.bindIp(如 127.0.0.1 仅本地;需要远程访问可改为 0.0.0.0 或指定内网 IP,注意安全)
    • 防火墙与云安全组:放行 27017/TCP(例如 ufw allow 27017,或云厂商安全组规则)
    • 认证与授权:启用认证后,连接需提供用户名/密码或采用合适 authMechanism;副本集需正确配置 replicaSet 与读偏好
    • 常见报错:
      • “Connection refused”:服务未起/端口不对/被防火墙拦截
      • “No Server Chosen by ReadPreference …”:检查 ReadPreference 与副本集成员健康状态、网络连通性

四 性能慢与查询优化

  • 监控与定位:
    • 实时指标:mongostat(吞吐、延迟、锁等)、mongotop(集合读写耗时)
    • 慢查询:开启 Profiling 或设置 slowOpThresholdMs,用 db.getProfilingStatus() 查看级别;分析慢查询日志
    • 执行计划:db.collection.find(…).explain(“executionStats”) 检查是否命中索引、扫描方式(COLLSCAN/IXSCAN)
  • 优化要点:
    • 索引:为高频查询字段建立索引;多条件查询使用复合索引;尽量使用覆盖索引减少回表
    • 查询写法:避免全表扫描与无限制返回;使用 limit()/projection 减少数据量;必要时用 hint() 验证索引选择
    • 存储引擎缓存:在 /etc/mongod.conf 调整 storage.wiredTiger.engineConfig.cacheSizeGB(依据内存与业务权衡)
    • 架构扩展:数据量大或并发高时考虑 副本集/分片 提升吞吐与可用性

五 数据一致性与高可用问题

  • 症状:出现 Write concern failed、从节点数据落后或读取旧数据。
  • 排查与解决:
    • 副本集健康:rs.status() 查看成员 health/optime/lastHeartbeat;确认多数派节点可写、网络时延正常
    • 写关注与读偏好:根据业务选择 w: “majority”/wtimeoutreadPreference(如 primary/secondaryPreferred),避免在不一致窗口读取关键数据
    • Oplog 与同步:检查 oplog 大小与同步滞后(rs.printReplicationInfo()),必要时扩容 oplog 或优化节点负载
    • 变更流程:变更前备份(mongodump),变更中分阶段执行并观察复制延迟与错误日志

0