2013-07-29 45 views
8

我已经看到了这个错误几次,并修复它,我只是重新启动我的服务器。MongoDB列入黑名单致命错误

Fatal error: Uncaught exception 'MongoConnectionException' with message 'Failed to connect to: localhost:27017: Previous connection attempts failed, server blacklisted' in /var/www/html/include/config.php:9 Stack trace: #0 /var/www/html/include/config.php(9): MongoClient->__construct('mongodb://local...') #1 /var/www/html/classes.php(3): include('/var/www/html/i...') #2 /var/www/html/myusers.php(8): include('/var/www/html/c...') #3 {main} thrown in /var/www/html/include/config.php on line 9

但是,我可能有一段时间没有看到它...我怎样才能防止这个问题发生?

更新:它再次发生,并等待几分钟后,我不得不重新启动,以再次使现场工作

回答

1

显然,这是一种由MongoDB的PHP驱动程序错误的问题。检查你是否使用1.4.0版本,如果是,更新到新版本并且错误应该被修正。

+7

这不是一个错误...这是一个功能。 – Derick

+0

当我看看[this]时,看起来像是一个bug(https://jira.mongodb.org/browse/PHP-846)。我的错。顺便说一句,很高兴被XDebug的创造者评论。 *弓* :) – ciruvan

14

由于1.4版本的PHP版MongoDB驱动程序,如果无法联系到服务器,我们将“黑名单”服务器长达一分钟。这是为了让我们不用连接超时服务器,这可能会超时。这主要是为了确保在副本集环境中我们仍然可以继续使用另一个主机,但是当然如果你只有一台机器,这有点棘手。

如果使用MongoLog那么你可以很轻松地发现引擎盖下会发生什么:

MongoLog::setModule(MongoLog::ALL); 
MongoLog::setLevel(MongoLog::ALL); 
MongoLog::setCallback('print_mongo_log'); 
function print_mongo_log($a, $b, $c) { echo $c, "\n"; } 

这将显示驱动程序正在试图做的一切。当出现问题时,看到第一个转储会很有趣,而且有一次它会“卡在”黑名单中。

上述警告将在60秒后或重新启动Web服务器软件(或您使用PHP-FPM)时消失。如果你觉得这个解释是不正确的,请在http://jira.mongodb.org/browse/PHP

+1

它再次发生,等待几分钟后,我不得不重新启动,使网站再次工作 – jSmith

+0

你根本不必“重新启动” - 这听起来很奇怪。听起来好像它没有被从黑名单中删除。我已经更新了包含一些调试建议的答案。 – Derick

+1

有没有一种方法可以禁用此功能,因为我们没有使用mongo副本集? – MaK

0

提交一个bug /功能请求这似乎蒙戈处理连接本身,你不应该使用,如果你想使用持久性蒙戈连接在你的代码紧密的联系,我已经解决这个问题通过从蒙戈连接PHP脚本接近这样的:

不要使用接近..............

$client = new MongoClient("mongodb://127.0.0.1:27017"); 
//close mongo connection 
$client->close(); 

希望对大家有用。