本页针对您在使用PHP库连接到MongoDB 部署时可能遇到的问题提供了可能的解决方案。
注意
本页仅解决连接问题。如果在使用MongoDB或PHP库时遇到其他问题,请访问以下资源:
问题和帮助页面,提供有关报告错误、为库做出贡献以及查找更多资源的信息
MongoDB Community论坛,用于提问、讨论或获取一般技术支持
服务器连接错误
当您尝试连接到服务器时出现问题, PHP库会返回错误消息。如果此错误类似于以下消息,则表明该库无法连接到MongoDB 部署:
No suitable servers found (`serverSelectionTryOnce` set): [connection refused calling hello on 'localhost:27017']
以下各节介绍可能有助于解决问题的方法。
检查连接 URI
验证连接 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 的选项中指定身份验证凭证。
如果使用 $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);
DNS 解析错误
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。