连接故障排除
本页面针对您在使用 MongoDB Rust 驱动程序连接到 MongoDB 部署时可能遇到的问题提供了可能的解决方案。
注意
此页面仅解决连接问题。 如果您在使用 MongoDB 或驱动程序时遇到任何其他问题,请访问以下资源:
操作错误处理,提供有关如何处理驱动程序在操作期间引发的不同错误类型的建议
问题和帮助页面提供有关报告错误、为驱动程序做出贡献以及查找更多资源的信息
用于提问、讨论或一般技术支持的MongoDB Community论坛
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 Server 实例的默认端口值为27017
,但您可以将 MongoDB 配置为侦听其他端口。
连接副本集时,请在连接字符串中包含所有副本集主机。用逗号分隔连接字符串中的每个主机。这样,即使其中一个主机无法访问,驱动程序也能建立连接。
要了解有关在副本集中指定多个主机的更多信息,请参阅连接指南的连接到副本集部分。
配置防火墙
如果您的 MongoDB 部署托管在防火墙后面,请确保防火墙中开启 MongoDB 所监听的端口。如果您的部署监听默认网络端口,请确保端口 27017
在防火墙中处于开启状态。如果您的部署在不同的端口进行监听,请确保在防火墙上开启相应的端口。
警告
不要打开防火墙端口,除非您确定它是 MongoDB 部署监听的端口。
检查连接数
每个 Client
实例在其连接池中支持最大数量的并发打开连接。配置参数 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 用户界面或Atlas 命令行界面中恢复集群。
要了解如何恢复集群,请参阅 Atlas 文档中的恢复一个集群。
检查网络地址
验证连接字符串中的网络地址或主机名是否准确。
如果您的部署托管在MongoDB Atlas上,则可以按照连接到集群教程来查找Atlas连接string 。