PHP MongoClient连接带有身份验证的副本集



我只是简单地尝试连接到mongo并运行一个简单的读取查询,但没有成功。

我正在使用:

  • Mongo 3.0.3
  • PHP 5.6.9
  • Ubuntu Linux服务器操作系统

我在上有服务器

  • AWS Ubuntu web服务器
  • Google Cloud Mongo副本集集群(5个盒子,1个仲裁器)

我使用的示例来自:

PHP副本集:http://php.net/manual/en/mongo.connecting.rs.php

PHP身份验证:http://php.net/manual/en/mongo.connecting.auth.php

这是代码:

$this->mongooe = new MongoClient('mongodb://mongo-1.mongo.example.com:27017,
        mongo-2.mongo.example.com:27017,
        mongo-3.mongo.example.com:27017,
        mongo-4.mongo.example.com:27017,
        mongo-5.mongo.example.com:27017', 
        [
            'replicaSet'=> 'exampleSet', 
            'db'        => 'example', 
            'username'  => 'example-admin', 
            'password'  =>'123456'
        ]);

我在日志中得到这个错误:

[Mon Nov 23 17:56:23.864370 2015] [:error] [pid 2480] [client 192.168.56.1:61512] [2015-11-23 17:56:23] .ERROR: mongo-1.mongo.example.com:27017: not authorized for query on example.history {"exception":"[object] (MongoCursorException(code: 13): mongo-1.mongo.example.com:27017: not authorized for query on example.history at /media/sf_api_admin/app/Controller/V1/Example/Config.php:66)"} [], referer: http://localhost:8042/example/configs

尽管我已经尝试了8种不同的语法配置,比如这个:

$this->mongooe = new MongoClient('mongodb://example-admin:123456@mongo-1.mongo.example.com:27017,
        example-admin:123456@mongo-2.mongo.example.com:27017,
        example-admin:123456@mongo-3.mongo.example.com:27017,
        example-admin:123456@mongo-4.mongo.example.com:27017,
        example-admin:123456@mongo-5.mongo.example.com:27017', 
        [
            'replicaSet'=> 'exampleSet', 
            'db'        => 'example'
        ]);

我也得到这个错误:No candidate servers found

我的示例管理员有以下角色:

  • 数据库管理员
  • 数据库所有者
  • 读取
  • 读写
  • userAdmin

(基本上完全访问,仅用于测试)

我真的错过了什么愚蠢的东西,有人帮我吗?

谢谢,

这是一个简单的解决方案。

这样做:

sudo apt-get install pkg-config libssl-dev sudo pecl install mongodb-1.2.0alpha3 不要忘记在php.ini文件中包含mongodb.so。

对于这个新版本的mongo,您需要使用构建的alpha版本。

相关内容

最新更新