本文旨在帮助您解决连接 MongoDB 实例时遇到的问题。建议优先查阅常见报错章节,以快速定位并解决问题;如果未找到匹配的错误信息,可参考排查步骤,自主诊断和解决连接问题。
连接问题排查步骤
步骤一:网络连接
排查方法
通过以下命令测试到达MongoDB实例的网络是否通畅。
-
ping <域名>,例如ping dds-xxxx.mongodb.rds.aliyuncs.comping dds-xxx.mongodb.rds.aliyuncs.com PING dds-xxx.mongodb.rds.aliyuncs.com (xxx): 56 data bytes 64 bytes from xxx: icmp_seq=0 ttl=90 time=7.698 ms 64 bytes from xxx: icmp_seq=1 ttl=90 time=7.085 ms 64 bytes from xxx: icmp_seq=2 ttl=90 time=11.006 ms 64 bytes from xxx: icmp_seq=3 ttl=90 time=12.154 ms 64 bytes from xxx: icmp_seq=4 ttl=90 time=9.149 ms图中示例表示客户端与MongoDB实例之间网络连通。
-
telnet <域名> <端口号>,例如telnet dds-xxxx.mongodb.rds.aliyuncs.com 3717root@mongotest:~# telnet xxx.mongodb.rds.aliyuncs.com 3717 Trying xxx... Connected to xxx.mongodb.rds.aliyuncs.com. Escape character is '^]'.图中示例表示可以正常解析该域名地址,且3717端口可正常通信。
核查清单
如果网络测试不通,请通过以下方式排查问题及解决。
步骤二:授权与身份验证
步骤三:其他问题核查
常见报错
|
错误信息 |
报错原因及解决方法 |
|
|
|
|
可能该实例的连接数已经达到上限,无法为新的连接请求建立连接。 解决方法:
|
|
|
MongoDB 驱动程序的等待队列已满,可能由于连接池设置较小或出现高并发请求等原因导致,从而无法提供可用连接。 解决方法:
|
|
|
并发连接过多时,可能会耗尽可用会话。 解决方法:
|
|
请检查实例连接地址是否正确,连接地址说明,请参见: |
|
云服务器ECS实例通过私网连接云数据库MongoDB失败。 解决方法:
|
|
|
|
|
当前写入数据的节点不是主节点(Primary节点)。 原因:仅主节点可以执行写操作。如果您的业务之前通过主节点(Primary节点)的地址连接,副本集实例主备切换后,实际连接的节点角色变成了从节点(Secondary节点),写入会失败。 解决方法:
请为业务设计重连机制和异常处理能力,连接闪断后可自动重连,保障业务稳定运行。 |
|
|
磁盘满导致实例锁定。 解决方法:解决因磁盘空间耗尽导致的锁定或无法写入问题。 |
|
|
|
|
数据库账号的密码中包含特殊字符 |
|
|
云数据库MongoDB不支持 |