【问题标题】:PHP MongoDB Driver on shared hosting doesnt connect to atlas共享主机上的 PHP MongoDB 驱动程序未连接到地图集
【发布时间】:2018-10-04 00:43:14
【问题描述】:

使用 mongodb 驱动程序 1.5.2 从共享主机连接到 mongodb atlas 免费层并尝试编写简单文档会出现以下错误。我做错了什么?

$manager = new MongoDB\Driver\Manager("mongodb://admin:admin@test-shard-00-00-rbgc.mongodb.net:27017/db?ssl=false&replicaSet=test-shard-0&authSource=admin&serverSelectionTryOnce=false");

var_dump($manager);

$bulk = new MongoDB\Driver\BulkWrite;

$bulk->insert(['x' => 1]);
$manager->executeBulkWrite('db.collection', $bulk);

致命错误:未捕获 MongoDB\Driver\Exception\ConnectionTimeoutException:没有合适的 找到的服务器:serverselectiontimeoutms 超时:[连接关闭 在 'test-shard-00-00-waf4c.mongodb.net:27017' 上调用 ismaster] /Applications/AMPPS/www/mongodb/liveserver.php:63

当我 var_dump 得到 $manager 时:

对象(MongoDB\Driver\Manager)#1 (2) { ["uri"]=> 字符串(64) "admin:admin@test-shard-00-00-rbgc.mongodb.net:27017/" ["cluster"]=> 数组(0) { } }

我也尝试了以下方法,但错误始终相同:

$manager = new MongoDB\Driver\Manager('mongodb://admin:admin@pirat-shard-00-00-vegbq.gcp.mongodb.net:27017/db?ssl=falseweak_cert_validation=false');

$bulk = new MongoDB\Driver\BulkWrite;


$bulk->insert(['x' => 1]);
$bulk->insert(['x' => 2]);
$bulk->insert(['x' => 3]);
$manager->executeBulkWrite('db.collection2', $bulk);

【问题讨论】:

  • 您可以从其他任何地方连接到它吗? telnet test-shard-00-00-rbgc.mongodb.net 27017 表示“提供节点名或服务名,或未知”
  • @AlexBlex 我可以从我的本地机器连接到它,它在 mongoDB 或 libcrypto 中不使用 OpenSSL,而是使用 Secure Transport 和 Common Crypto。
  • 您没有使用 ssl - 它在 url 中是 ssl=false,是吗?尝试关注php.net/manual/en/mongodb-driver-manager.construct.php并拆分连接字符串以匹配构造函数接口。
  • 您是否尝试过使用它期望的参数创建管理器?
  • “一些”是什么意思?只有 3 个,并且您在问题中仅使用第一个,将所有内容都作为单个字符串。如果您尝试了其他任何方法,请根据您的尝试更新问题。

标签: php mongodb mongodb-query mongodb-php mongodb-atlas


【解决方案1】:

连接字符串错误。新旧驱动有 2 个版本,两个版本均由 atlas 提供:

3.6+版本应该是:

mongodb+srv://admin:admin@test-shard-rbgc.mongodb.net:27017/db?retryWrites=true

它是mongodb+srv:// 和一个带有少量参数的分片地址。它应该适用于 mongodb-1.5。如果没有,请尝试旧版:

3.4-版本应该是(单行):

mongodb://admin:admin@test-shard-00-00-rbgc.mongodb.net:27017,
   test-shard-00-01-rbgc.mongodb.net:27017,
   test-shard-00-02-rbgc.mongodb.net:27017
   /db?ssl=true&replicaSet=Test-shard-0&authSource=admin&retryWrites=true

mongodb://,url中replica set的所有成员列表,参数中replicaset的名称等

另外,请确保您的服务器的 IP 地址在地图集中列入白名单。

【讨论】:

  • 刚刚在 Ubuntu Bionic 上使用股票 php 7.2.10 和 mongodb 1.3.4 进行了测试,旧版连接工作正常。
  • 将 mongodb 驱动程序升级到 1.5.3 - 它与新的 v3.6 连接 url 完美配合。
  • 有图片docker pull alexblex/so-52627401可以查看其他设置。
  • 很公平。尝试联系托管支持。请清理您的收藏2 并更改密码。恐怕我在那里做了很少的插入测试。
  • 我是这么认为的,你可以拉图查看。这是发布它的目的。我肯定在旧网址中使用了ssl=true
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-27
  • 1970-01-01
相关资源
最近更新 更多