连接故障排除
本页提供了解决您在使用 MongoDB Rust 驱动连接到 MongoDB 部署时可能遇到的问题的潜在解决方案。
注意
本页面仅针对连接问题。如果您遇到任何与MongoDB或驱动程序相关的其他问题,请访问以下资源
操作错误处理,了解如何处理驱动程序在操作过程中引发的不同错误类型
问题 & 帮助页面,了解如何报告错误、为驱动程序做出贡献以及查找更多资源
MongoDB 社区论坛,用于提问、讨论或一般技术支持
常见问题解答 (FAQ)部分,了解有关Rust驱动程序常见问题和相应答案
服务器连接错误
当您尝试连接到服务器时发生问题时,Rust驱动程序会返回一个错误消息。如果此错误消息类似于以下消息,则表示驱动程序无法连接到MongoDB部署
Error: Error { kind: ServerSelection { message: "Server selection timeout: No available servers. Topology: { Type: Unknown, Servers: [ { Address: 127.0.0.1:27017, Type: Unknown, Error: Kind: I/O error: Connection refused (os error 61), labels: {} } ] }" }, labels: {}, wire_version: None, source: None }
以下各节描述了可能有助于解决该问题的方法。
检查连接字符串
请核实连接字符串中的主机名和端口号是否准确。在示例错误消息中,主机名是127.0.0.1
,端口号是 27017
。MongoDB服务器实例的默认端口号是 27017
,但您可以配置MongoDB监听其他端口号。
当连接到副本集时,请将连接字符串中的所有副本集主机包含在内。使用逗号分隔连接字符串中的每个主机。这使驱动程序能够在其中一个主机不可达时建立连接。
有关在副本集中指定多个主机的更多信息,请参阅连接指南中的连接到副本集部分。
配置防火墙
如果你的MongoDB部署位于防火墙后面,请确保MongoDB监听的端口在防火墙中已打开。如果你的部署监听默认网络端口,请确保防火墙中已打开端口 27017
。如果你的部署监听不同的端口,请确保该端口在防火墙中已打开。
警告
除非你确定它就是MongoDB部署监听的端口,否则不要打开防火墙端口。
检查连接数
每个 客户端
实例都支持连接池中最大并发打开连接数。配置参数 maxPoolSize
定义了此值,默认设置为 100
。如果打开的连接数等于 maxPoolSize
,则服务器会等待直到连接可用。如果等待时间超过 maxIdleTimeMS
值,则驱动程序会返回错误。
要了解驱动程序中连接池的工作方式,请参阅常见问题解答页面上的 Rust 驱动程序的连接池是如何工作的?
认证错误
Rust驱动程序可能无法连接到MongoDB部署,如果认证配置不正确。在这种情况下,驱动程序会抛出类似以下消息的错误
Error: Error { kind: Authentication { message: "SCRAM failure: bad auth : authentication failed" }, labels: {}, wire_version: None, source: Some(Error { kind: Command(CommandError { code: 8000, code_name: "AtlasError", message: "bad auth : authentication failed", topology_version: None }), labels: {}, wire_version: None, source: None }) }
以下各节描述了可能帮助解决问题的方法。
检查凭据格式
认证问题最常见的原因之一是MongoDB连接字符串中凭据格式无效。
提示
有关连接字符串的更多信息,请参阅创建连接字符串指南。
如果您的连接字符串包含用户名和密码,请确保它们格式正确。
注意
验证认证机制
确保您的凭据和认证机制正确。您可以在连接字符串的选项中指定您的认证凭据。
或者,您可以在Credential
结构体中指定您的认证凭据。
要了解更多关于认证的信息,请参阅认证机制指南。
验证用户是否在认证数据库中
当使用基于用户名和密码的认证方法时,用户名必须在认证数据库中定义。
默认认证数据库是admin
数据库。要使用不同的数据库进行认证,请指定连接字符串中的authSource
选项。
以下示例指示MongoDB使用users
数据库作为认证数据库
let uri = "mongodb://<username>:<password>@<hostname>:<port>/?authSource=users"; let client = Client::with_uri_str(uri).await?;
DNS 解析错误
Rust 驱动可能无法解析您的 DNS 连接。当发生这种情况时,您可能会收到类似于以下消息的错误信息
Error: Error { kind: DnsResolve { message: "sample message. type: SRV class: IN" }, labels: {}, wire_version: None, source: None }
如果驱动程序报告此错误,请尝试以下章节中的方法解决问题。
检查数据库部署可用性
如果您正在连接到 MongoDB Atlas,并且您的驱动程序找不到 Atlas 数据库部署的 DNS 主机,数据库部署可能已被暂停或删除。
请确保数据库部署存在于 Atlas 中。如果集群已暂停,您可以在 Atlas UI 或 Atlas 命令行界面。
要了解如何恢复集群,请参阅 Atlas 文档中的 恢复一个集群。
检查网络地址
请验证您的连接字符串中的网络地址或主机名的准确性。
如果您在 MongoDB Atlas 上托管部署,您可以按照 连接到您的集群 教程找到您的 Atlas 连接字符串。