4

我正在尝试对db.currentOp()mongodb ReplicaSet 的不同成员运行该命令,以查看他们当前正在运行的查询。

我唯一从中获取数据的是主服务器,所有辅助服务器都响应:

array(3) {
  'errmsg' =>
  string(10) "not master"
  'note' =>
  string(16) "from execCommand"
  'ok' =>
  double(0)
}

测试代码:

<?php

$servers = array();
$servers['primary'] = new MongoClient('mongodb://primary:27017');
$servers['secondary1'] = new MongoClient('mongodb://secondary1:27017');
$servers['secondary2'] = new MongoClient('mongodb://secondary2:27017');

foreach ($servers as $name => $client) {
    echo $name . ':' . PHP_EOL. PHP_EOL;
    /* @var $client \MongoClient */
    $admin = $client->selectDB('admin');
    var_dump($admin->execute('db.currentOp()'));
    echo PHP_EOL;
}

使用 Mongo shell 并连接到辅助我可以db.currentOP()在 Shell 中毫无问题地执行。

使用 RoboMongo ( http://robomongo.org/ ) 并连接到辅助服务器,我可以db.currentOP()在 Shell 中毫无问题地执行。

使用 MongoVue ( http://www.mongovue.com/ ) 并连接到辅助服务器,我可以在服务器页面上看到正在运行的查询。

那么我做错了什么还是不支持使用 php 对辅助服务器执行此命令?

因为在其他语言中似乎可以从辅助中获取数据。

我真的很感激任何提示以某种方式从 php 运行它。

测试环境

MongoDB 服务器: 2.2.2(具有 1 个主节点、2 个辅助节点的 ReplicaSet)

PHP: 5.4.9 / 5.3.5

MongoDB PHP 驱动程序: ubuntu 13.04 / debian 上的 1.4.4 / 1.3.0

解决方案:

<?php

$servers = array();
$servers['primary'] = new MongoClient('mongodb://primary:27017');
$servers['secondary1'] = new MongoClient('mongodb://secondary1:27017');
$servers['secondary2'] = new MongoClient('mongodb://secondary2:27017');

foreach ($servers as $name => $client) {
    echo $name . ':' . PHP_EOL. PHP_EOL;
    /* @var $client \MongoClient */
    $admin = $client->selectDB('admin');
    var_dump($admin->selectCollection('$cmd.sys.inprog')->findOne());
    echo PHP_EOL;
}
4

0 回答 0