对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

连接故障排除

本页针对您在使用PHP库连接到MongoDB 部署时可能遇到的问题提供了可能的解决方案。

注意

本页仅解决连接问题。如果在使用MongoDB或PHP库时遇到其他问题,请访问以下资源:

当您尝试连接到服务器时出现问题, PHP库会返回错误消息。如果此错误类似于以下消息,则表明该库无法连接到MongoDB 部署:

No suitable servers found (`serverSelectionTryOnce` set):
[connection refused calling hello on 'localhost:27017']

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

验证连接 URI 中的主机名和端口号是否准确。在该示例错误消息中,主机名为 127.0.0.1,端口为 27017。MongoDB Server部署的默认端口值为 27017,但您可以将MongoDB配置为侦听其他端口。

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

要学习;了解如何指定多个副本集主机,请参阅《选择连接目标》指南中的副本集部分。

如果您的 MongoDB 部署托管在防火墙后面,请确保防火墙中开启 MongoDB 所监听的端口。如果您的部署监听默认网络端口,请确保端口 27017 在防火墙中处于开启状态。如果您的部署在不同的端口进行监听,请确保在防火墙上开启相应的端口。

警告

不要打开防火墙端口,除非您确定它是 MongoDB 部署监听的端口。

如果授权配置不正确, PHP库可能无法连接到MongoDB 部署。在这些情况下,该库会引发类似于以下消息的错误消息:

Authentication failed.

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

身份验证问题的最常见原因之一是MongoDB连接 URI 中的凭证格式无效。

提示

要学习;了解有关使用连接 URI 的更多信息,请参阅创建MongoDB客户端指南中的连接 URI。

如果您的连接 URI 包含用户名和密码,请确保格式正确。

注意

如果以下字符出现在用户名或密码中,则必须对其进行百分号编码:

: / ? # [ ] @

在连接 URI 中使用百分比编码的用户名和密码。

确保您的凭证和身份验证机制正确。您可以在连接 URI 的选项中指定身份验证凭证。

如果使用 $uriOptions 参数指定身份验证机制,请确保将 'authMechanism' 选项设立为正确的机制。以下代码展示了如何在选项参数中指定 SCRAM-SHA-1身份验证机制:

$uriOptions = [
'username' => '<username>',
'password' => '<password>',
'authSource' => '<authentication database>',
'authMechanism' => 'SCRAM-SHA-1',
];
$client = new MongoDB\Client(
'mongodb://<hostname>:<port>',
$uriOptions,
);

要学习;了解有关指定身份验证机制的更多信息,请参阅身份验证机制部分。

使用基于用户名和密码的身份验证方法时,必须在身份验证数据库中定义用户名。

默认身份验证数据库是 admin数据库。要使用不同的数据库进行身份验证,请在连接 URI 中指定 authSource 选项。

以下示例指示 MongoDB 使用 users 数据库作为身份验证数据库:

$uri = 'mongodb://<username>:<password>@<hostname>:<port>/?authSource=users';
$client = new MongoDB\Client($uri);

PHP库可能无法解析您的 DNS 连接。发生这种情况时,您可能会收到类似于以下消息的错误消息:

No suitable servers found (`serverSelectionTryOnce` set): [Failed to resolve '<host>'].

如果库报告此错误,请尝试以下部分中的方法来解决问题。

如果您正在连接到 MongoDB Atlas,而您的驱动程序无法找到 Atlas 数据库部署的 DNS 主机,该数据库部署则可能会暂停或删除。

确保Atlas中存在数据库部署。如果集群暂停,您可以在Atlas用户界面或Atlas命令行界面中恢复集群。

To learn how to resume a cluster, see Resume One Cluster in the Atlas documentation.

验证连接 URI 中的网络地址或主机名是否准确。

If your deployment is hosted on MongoDB Atlas, you can follow the Connect to Your Cluster tutorial to find your Atlas connection URI.