Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs 菜单
Docs 主页
/ / /
PHP 库手册
/

连接故障排除

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

注意

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

  • 问题和帮助页面,提供有关报告错误、为库做出贡献以及查找更多资源的信息

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

当您尝试连接到服务器时出现问题, 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 命令行界面中恢复集群。

要了解如何恢复集群,请参阅 Atlas 文档中的恢复一个集群

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

如果您的部署托管在MongoDB Atlas上,则可以按照连接到集群教程来查找Atlas连接 URI。

后退

AWS Lambda

在此页面上