序号 | 可能原因 | 排查方法 | 解决方法 |
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 ,说明用户名密码输入错误。 | |
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 确认版本信息。 | |
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 | 检查客户连接数是否已经达到上限。每个实例都有连接数上限的限制,超过限制,则无法连接。 |
本页内容是否解决了您的问题?