Docs 菜单
Docs 主页
/ / /
Rust 驱动程序

连接故障排除

在此页面上

  • 服务器连接错误
  • 检查连接字符串
  • 配置防火墙
  • 检查连接数
  • 身份验证错误
  • 检查凭证格式
  • 验证身份验证机制
  • 验证用户是否处于身份验证数据库中
  • DNS 解析错误
  • 检查数据库部署可用性
  • 检查网络地址

本页面针对您在使用 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?;

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 。

后退

FAQ