文档菜单
文档首页
/ / /
Rust 驱动

连接故障排除

本页内容

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

本页提供了解决您在使用 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?;

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 连接字符串。

返回

常见问题解答