本文介绍如何排查无法连接云数据库MongoDB实例的问题。
若您已收到客户端返回的错误信息,请查阅连接失败常见报错匹配解决方案。
概览
检查白名单设置
您需要将正确的客户端IP地址添加到云数据库MongoDB实例的白名单中,才能连接云数据库MongoDB实例。
检查网络环境
- 私网:确保实例处于同一个地域、实例的网络类型相同且私网连接地址正确。
若实例的网络类型都是专有网络(VPC),您还需要确保实例在同一个专有网络中。
- 公网:确保公网连接地址正确。
如何解决由网络环境导致的实例连接失败问题,请参见如何解决由网络环境导致的实例连接失败问题?。
检查实例连接地址
您需要使用正确的实例连接地址,才能连接云数据库MongoDB实例。
- 常见原因一:使用了错误的网络环境的连接地址。
例如计划通过公网连接云数据库MongoDB实例却使用了实例的专有网络连接地址,导致连接失败。
解决方案:请根据网络环境,使用正确的连接地址。
- 常见原因二:连接地址中的鉴权数据库有误。
解决方案:请在连接串中填写正确的鉴权数据库。
如果您使用高可用地址连接云数据库MongoDB实例,连接串中包含数据库和鉴权数据库,这两个数据库可以相同也可以不同。本文以副本集实例的ConnectionstringURI地址为例进行介绍,连接串格式如下:mongodb://<username>:<password>@<host1>:<port1>,<host2>:<port2>,...,<hostN>:<portN>/<database>?replicaSet=<replicaSet_value>[&authSource=<authenticationDatabase>]
数据库和鉴权数据库的参数说明如下:<database>
:数据库,实例连接成功后默认要访问的数据库,相当于自动执行命令use <database>
。authSource=<authenticationDatabase>
(可选):<authenticationDatabase>
为鉴权数据库名称。如果不配置该参数,<database>
会作为鉴权数据库。鉴权数据库用于存储数据库账号和密码。数据库账号必须在所属的数据库下进行鉴权,才能鉴权成功。
示例:- root账号存储在admin数据库中,在admin数据库鉴权成功后,实例进入admin数据库。
mongodb://root:****@dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717,dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-6108****
- test账号存储在newDB数据库中,在newDB数据库鉴权成功后,实例进入admin数据库。
mongodb://test:****@dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717,dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-6108****&authSource=newDB
- test账号存储在newDB数据库中,在newDB数据库鉴权成功后,实例进入newDB数据库。
mongodb://test:****@dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717,dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717/newDB?replicaSet=mgset-6108****&authSource=newDB
- 常见原因三:实际连接的节点不是主节点(Primary节点)。
此原因仅适用于副本集实例。如果您的业务通过主节点的地址连接副本集实例,主备切换后实际连接的节点角色变成了从节点(Secondary节点),所以写入失败。说明 导致实例发生主备切换的原因有很多种,具体请参见 为什么实例会发生主备切换。
- 常见原因四:连接地址中的账号密码包含特殊字符
!@#$%^&*()_+=
。通过Mongo Shell或程序代码连接云数据库MongoDB实例时,如果连接串中的账号密码包含特殊字符
!@#$%^&*()_+=
,这些特殊字符在连接时无法被识别,会导致实例连接失败。解决方案:您需要对账号密码中的特殊字符进行转义处理,详情请参见如何解决连接串中账号密码包含特殊字符导致连接失败的问题。
检查域名解析情况
域名解析正确,才能连接云数据库MongoDB实例。
排查方案:通过ping <域名>
或telnet <域名> <端口号>
命令测试网络的连通性。
解决方案:请参见Linux系统的ECS实例内部无法正常解析域名。
检查实例状态
实例的状态为运行中,才能连接云数据库MongoDB实例。
- 常见原因:磁盘空间耗尽。
- 解决方案:请参见解决因磁盘空间耗尽导致的锁定或无法写入问题。
检查第三方工具
当第三方工具(如Navicat、Compass等工具)无法连接云数据库MongoDB实例时,有可能是实例的设置或者第三方工具的设置不正确等原因造成的。您需要确保实例和第三方工具的设置都正确,才能通过第三方工具连接云数据库MongoDB实例。
- 连接成功:第三方工具的设置不正确。请根据您实际使用的工具,具体排查工具的各种设置。
- 连接失败:实例的设置不正确。请参照本文排查白名单设置、网络环境、实例连接地址、域名解析情况和实例状态。