有奖捉虫:办公协同&微信生态&物联网文档专题 HOT
文档中心 > 云数据库 MongoDB > 最佳实践 > 无法连接 MongoDB 解决方法

场景描述

使用云服务器 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。