我正在尝试对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;
}