MongoDB 故障排除与配置操作手册

1. 概述

本手册总结了本次会话中解决的三个主要 MongoDB 故障和配置问题,并提供了详细的操作步骤,以确保 MongoDB 服务的稳定运行和用户认证的正确配置。

2. 问题一:MongoDB 服务启动失败(PID 目录非持久化)

2.1 诊断

错误现象: systemctl status mongod 显示 Active: activating (auto-restart) (Result: exit-code),日志中显示 ERROR: Cannot write pid file to /var/run/mongodb/mongod.pid: No such file or directory

根本原因: MongoDB 配置文件 /etc/mongodb/mongod.conf 中指定的 PID 目录 /var/run/mongodb 在系统重启或服务停止后被清除(因为 /var/run 是临时文件系统 tmpfs)。

2.2 永久解决方案:使用 systemd tmpfiles.d

为了确保 /var/run/mongodb 目录在每次系统启动时都能被自动创建并设置正确的权限,我们使用 systemdtmpfiles.d 机制。

操作步骤:

  1. 创建 tmpfiles 配置文件:
    创建文件 /etc/tmpfiles.d/mongodb.conf 并写入以下内容。

    sudo cat << EOF > /etc/tmpfiles.d/mongodb.conf
    # Type Path Mode UID GID Age Argument
    d /var/run/mongodb 0755 mongodb mongodb -
    EOF
    
    • d:表示创建目录。
    • /var/run/mongodb:要创建的目录路径。
    • 0755:目录权限。
    • mongodb mongodb:目录的所有者和所属组(根据 mongod.service 文件确定)。
  2. 立即应用配置并启动服务:

    # 立即应用 tmpfiles 配置,创建 /var/run/mongodb 目录
    sudo systemd-tmpfiles --create /etc/tmpfiles.d/mongodb.conf
    
    # 重新加载 systemd 配置
    sudo systemctl daemon-reload
    
    # 启动 MongoDB 服务
    sudo systemctl start mongod
    
    # 验证服务状态
    sudo systemctl status mongod
    

    验证结果应显示 Active: active (running)

3. 问题二:MongoDB 用户创建失败(用户已存在)

3.1 诊断

错误现象: 尝试执行 db.createUser() 时,返回错误 Error: couldn't add user: User "idis_user@admin" already exists

根本原因: 目标用户 idis_user 已经在认证数据库(admin)中存在。

3.2 解决方案:更新现有用户密码

如果目的是修改用户的密码或角色,应使用 db.updateUser() 命令。本次操作将用户 idis_user 的密码更新为 xxxx

操作步骤:

  1. 连接到 MongoDB Shell:
    使用具有足够权限的用户(例如 root)连接到 MongoDB。

    mongo --host 127.0.0.1:27017 -u root -p <您的root密码> --authenticationDatabase admin
    
  2. 切换到认证数据库:

    use admin
    
  3. 更新用户密码:

    db.updateUser(
        "idis_user",
        {
            pwd: "xxxx"
        }
    )
    

4. 问题三:客户端认证失败

4.1 诊断

错误现象: 尝试使用 idis_user 连接时,返回 Error: Authentication failed.
错误命令示例:

mongo --host 192.168.0.2:27017 -u idis_user -p xxxx --authenticationDatabase idis_lhs

根本原因: 用户 idis_user 是在 admin 数据库中创建和定义的,因此它的认证数据库(Authentication Database)必须是 admin,而不是它被授权访问的数据库 idis_lhs

4.2 解决方案:指定正确的认证数据库

操作步骤:

使用 --authenticationDatabase admin 参数进行连接。

正确连接命令:

mongo --host 192.168.0.2:27017 -u idis_user -p xxxx --authenticationDatabase admin
  • --authenticationDatabase admin:告诉 MongoDB 在 admin 数据库中查找 idis_user 的凭证进行认证。

5. 总结

通过以上步骤,我们不仅解决了 MongoDB 服务启动的临时故障,还通过 systemd tmpfiles.d 实现了服务的持久化稳定运行,并修正了用户密码更新和客户端连接认证的配置问题。服务和用户现在均已配置正确并可正常使用。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容