tencent cloud

文档反馈

无法连接 MongoDB 解决方法

最后更新时间:2024-04-12 14:16:16

    场景描述

    使用云服务器 CVM 通过自动分配给云数据库的内网地址连接云数据库 MongoDB,具体连接方式,请参见 连接 MongoDB 实例。若连接失败,请参见下表进行排查与解决。

    排查与解决

    序号
    可能原因
    排查方法
    解决方法
    1
    云服务器 CVM 和 数据库 MongoDB 内网不互通。
    云服务器和数据库不属于同一私有网络内。云服务器与数据库务必在同一账号同一个 VPC 内,或同在基础网络内,内网才能直接互通。
    安全组配置错误。
    若想使用 CVM 连接 MongoDB,需在 CVM 安全组中配置出站规则,当出站规则的目标配置不为0.0.0.0/0且协议端口不为 ALL 时 ,需要把 MongoDB 的 IP 及端口添加到出站规则中。
    若想指定的 CVM 连接 MongoDB 实例,需要在 MongoDB 安全组中配置入站规则,当入站规则的源端配置不为0.0.0.0/0且协议端口不为 ALL时,需要把 CVM 的 IP 及端口添加到入站规则中。
    1. 登录 CVM 控制台,在实例列表的实例配置查看 CVM 网络信息。
    2. 登录 MongoDB 控制台,在实例列表查看 MongoDB 的网络信息。具体操作,请参见 查看实例详情
    3. 比较 CVM 与 MongoDB 是否属于同一网络。
    4. 登录 CVM,使用telnet 10.x.x.34 27017 确认 MongoDB 网络端口是否可正常访问。
    连接链路不通,如下图所示。
    
    连接链路成功,如下图所示。
    
    
    如下情况,都可能因网络问题导致连接失败。
    云服务器(CVM)采用私有网络(VPC),MongoDB 采用基础网络。建议将 MongoDB 从基础网络切换为 VPC 网络,请参见 切换实例网络
    CVM 采用基础网络,MongoDB 采用 VPC。建议将 CVM 从基础网络切换为 VPC 网络,请参见 切换私有网络服务
    CVM 与 MongoDB 在同一地域内,但属于不同的 VPC 网络。建议将 MongoDB 迁移到 CVM 所在的 VPC 网络,请参见 切换实例网络。
    CVM 与 MongoDB 不在同一地域内,属于不同的 VPC 网络。建议在两个 VPC 网络之间建立 云联网
    CVM 与 MongoDB 账号不同,属于不同的 VPC 网络。建议在两个 VPC 网络之间建立 云联网
    CVM 安全组配置有误
    1. 登录 安全组控制台,在安全组列表中,找到 CVM 所绑定的安全组,单击安全组名,进入 CVM 绑定的安全组详情页。
    2. 选择出站规则页签,单击添加规则
    类型选择自定义
    目标填写您 MongoDB 的 IP 地址(段)。
    协议端口填写 MongoDB 内网端口。
    策略选择允许
    MongoDB 安全组配置有误
    1. 登录 安全组控制台,在安全组列表中,找到 MongoDB 实例所绑定的安全组,单击安全组名,进入 MongoDB 绑定的安全组详情页。
    2. 选择入站规则页签,单击添加规则。 填写您允许连接的 IP 地址(段)及需要放通的端口信息(MongoDB内网端口),选择允许放通。
    类型选择自定义。
    来源填写您 CVM 的 IP 地址(段)。
    协议端口填写 MongoDB 内网端口。
    策略选择允许
    2
    用户名与密码输入错误。
    登录 CVM,连接数据库实例,提示账号密码错误。例如:提示Error: Authentication failed,说明用户名密码输入错误。
    登录 MongoDB 控制台,在实例详情页面,选择数据库管理页签,进入 账号管理页面,查看当前数据库所有账号信息,重置密码。具体操作,请参见 账号管理
    3
    数据库访问密码中包含%、@等特殊字符。
    密码中存在%与@特殊字符,驱动或者 MongoShell 等客户端没有自动转义这些特殊字符,引起这些特殊字符与连接串地址冲突,而导致用户名或密码出错。提示 Password cannot properly be URL decoded 或者 Error: Authentication failed错误信息。
    将访问密码的特殊字符按照如下转义规则进行处理:
    感叹号“!”: 转义为 %21
    at “@” : 转义为 %40
    警号“#”:转义为 %23
    百分号“%”: 转义为 %25
    插入号“^” : 转义为 %5e
    星号“*”: 转义为 %2a
    左括号“(”: 转义为 %28
    右括号“)”: 转义为 %29
    下划线“_”: 转义为 %5f
    例如,如果原始密码为:^%@132121a,则转义后的密码应为:^%25%40132121a
    4
    Mongoshell 版本过低
    登录 CVM,执行mongo --version确认版本信息。
    为保障鉴权成功,请安装 Mongo Shell 3.0及以上版本。安装步骤,请参见 官方文档
    5
    客户端的连接串中,没有正确使用鉴权库。
    控制台创建的用户:云数据库 MongoDB 统一使用 admin 库作为登录鉴权的认证数据库,在 URI 中端口后面必须加上“/admin”以指定认证库,通过认证后再切换到具体业务数据库进行读写操作。
    命令行创建的用户:直接指定对应的数据库认证即可。例如在 test 库下建立的用户登录时,指定的认证库为 test。
    控制台创建的用户:检查客户端程序中配置的连接串是否有包含“/admin”或者 authSource=admin。
    命令行创建的用户:请您自行检查连接串中的认证库是否为正确的数据库名称。
    登录 MongoDB控制台,在实例详情页面的网络配置区域,默认账号连接请直接复制 URI 形式的连接串。其他账户,请您自行修改为正确的认证库再尝试连接。具体操作,请参见 连接 MongoDB 实例
    如果以上方法仍未解决问题,您还可以 在线咨询 联系售后。
    6
    存在阻塞其他请求的操作。若在业务繁忙时段,进行了前台建索引操作(background 选项的值为 false )。该操作将阻塞其他的所有操作,导致请求被锁住,直到前台完成索引创建。具体创建索引的方式,请参见 MongoDB 官网
    业务侧自行排查索引创建的方式。
    采用后台方式建索引。但后台建索引方式也是有代价的,可能会导致索引创建时间变长。具体创建索引的选项,请参见 MongoDB 官网。同时,可通过 currentOp 命令来查看当前创建索引的进度,具体的命令如下:
    db.currentOp( { $or: [ { op: "command", "query.createIndexes": { $exists: true } }, { op: "insert", ns: /\\.system\\.indexes\\b/ } ] } )
    7
    检查客户连接数是否已经达到上限。每个实例都有连接数上限的限制,超过限制,则无法连接。
    登录 MongoDB控制台 ,在数据库管理页面,选择连接数管理页签,查看实例最大连接数实时连接数连接使用率。具体操作,请参见 连接数管理
    连接使用率偏高解决方法,请参见 连接使用率偏高异常分析
    注意:
    在官网控制台创建的用户其认证库均为 admin,因此用户登录时需要制定认证库为 admin。用命令行创建的用户,例如在 test 库下建立的用户登录时指定的认证库为 test。
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持