“文档” 菜单
文档首页
/ / /
Go 驱动程序

连接故障排除

在此页面上

  • 连接错误
  • 检查连接字符串
  • 配置防火墙
  • 身份验证错误
  • 检查连接字符串
  • 验证身份验证机制
  • 验证用户是否处于身份验证数据库中
  • 发送消息时出错
  • 检查连接字符串
  • 验证身份验证机制
  • 验证用户是否处于身份验证数据库中
  • 配置防火墙
  • 检查连接数
  • 超时错误
  • 设置超时选项
  • 检查连接数

本页面针对您在使用 MongoDB Go 驱动程序连接到 MongoDB 部署时可能遇到的问题提供了可能的解决方案。

注意

此页面仅解决连接问题。如果您在使用 MongoDB 或驱动程序时遇到任何其他问题,请访问以下资源:

  • Go 驱动程序的常见问题解答 (FAQ)

  • 问题和帮助页面,其中包含有关报告错误、促进驱动程序发挥作用以及查找其他资源的信息

  • MongoDB Community论坛,用于提问、讨论或获取一般技术支持

以下错误消息属于一般性消息,指示驱动程序无法通过指定主机名或端口连接到服务器。

Error: couldn't connect to server 127.0.0.1:27017

以下各部分介绍了可能有助于解决问题的方法。

确认连接字符串中的主机名和端口号都准确无误。在该示例错误消息中,主机名是 127.0.0.1,端口是 27017。MongoDB 实例的默认端口值为 27017,但您可以将 MongoDB 配置为在其他端口上进行通信。

假设您的 MongoDB 部署使用默认端口,请验证防火墙中是否已打开端口 27017。如果您的部署使用其他端口,请验证防火墙中是否已打开正确的端口。

警告

请勿在防火墙中打开端口,除非您确定该端口是 MongoDB 实例使用的端口。

如果授权配置不正确,Go 驱动程序可能无法连接到 MongoDB 实例。在这些情况下,驱动程序会发出类似于以下消息之一的错误消息:

Command failed with error 18 (AuthenticationFailed): 'Authentication
failed.' on server localhost:27017.
connection() error occurred during connection handshake: auth error:
sasl conversation error: unable to authenticate using mechanism
"SCRAM-SHA-256": (AuthenticationFailed) Authentication failed.

以下各部分介绍了可能有助于解决问题的方法。

当尝试连接到 MongoDB 时,无效的连接字符串是引发身份验证问题的最常见原因。

提示

有关连接字符串的更多信息,请参阅《连接指南》中的连接 URI

如果连接字符串包含用户名和密码,请确保格式正确。

注意

如果用户名或密码包含以下任何字符,则必须对它们进行 百分比编码:

: / ? # [ ] @

连接副本集时,请在连接字符串中包含所有副本集主机。用逗号分隔连接字符串中的每个主机。这样,即使其中一个主机无法访问,驱动程序也能建立连接。

确保您的凭证和身份验证机制正确。您可以将身份验证凭证存储在环境变量中,也可以将其传递给 SetAuth() 方法。

要了解有关身份验证的详情,请参阅身份验证机制指南。

要使用用户名和密码成功对连接进行身份验证,必须在身份验证数据库中定义用户名。默认身份验证数据库是 admin 数据库。要使用不同的数据库进行身份验证,请在连接字符串中指定 authSource。以下示例指示驱动程序使用 users 作为身份验证数据库:

uri := "mongodb://<username>:<password>@<hostname>:<port>/?authSource=users"
client := mongo.Connect(uri)

当您发出请求之后,如果驱动程序无法发送命令时,通常会显示下面这条一般错误消息:

com.mongodb.MongoSocketWriteException: Exception sending message

以下各部分介绍了可能有助于解决问题的方法。

请验证您的应用中的连接字符串是否准确。如需进一步了解如何验证连接字符串,请参阅连接错误验证错误

请务必使用正确的身份验证机制和凭证。有关身份验证错误的更多信息,请参阅身份验证错误

验证用户是否在正确的身份验证数据库中。有关身份验证数据库的更多信息,请参阅身份验证错误

防火墙必须具有开放端口,用于与 MongoDB 实例通信。有关配置防火墙的更多信息,请参阅连接错误

每个 MongoClient 实例在其连接池中支持最大数量的并发打开连接。配置参数 maxPoolSize 定义了该值,默认设置为 100。如果打开连接数已等于 maxPoolSize,则服务器会等待,直到连接可用。如果此等待时间超过 maxIdleTimeMS 值,则驱动程序会返回错误。有关连接池化工作方式的更多信息,请参阅常见问题解答中的连接池化在 Go 驱动程序中是如何工作的?

有时,当您通过驱动程序向服务器发送请求时,请求会超时。出现这种情况时,您可能会收到类似以下的错误消息:

timed out while checking out a connection from connection pool: context canceled

如果收到这条错误消息,请尝试采用以下方法来解决问题。

Client(客户端)支持单个 Timeout(超时)选项,此选项控制着执行单个操作时花费的时间。您可以使用 SetTimeout() 方法或者在连接字符串中指定 timeoutMS选项,以设置此值。

以下示例通过连接字符串选项将单个超时值设置为 5 秒:

uri := "mongodb://<username>:<password>@<hostname>:27017/?timeoutMS=5000"
client := mongo.Connect(uri)

与服务器的连接数可能超过 maxPoolSize。有关检查连接数的更多信息,请参阅错误发送消息

← 常见问题