重启mongod服务后,当我尝试连接PHP时,每个数据库都出现连接错误:
Failed to connect to: localhost:27017: Remote server has closed the connection
500 Internal Server Error - MongoConnectionException
一次或两次刷新后,连接再次起作用。如果在重新启动后或在一段时间后立即建立连接,则不会介意。
MongoDB version: 2.6.4
PHP MongoDB driver version: 1.5.5
Configuration: PHP-FPM with Apache2
我认为使用旧mongo实例的持久连接,但我无法找到解决方法。当第一个连接失败时,有没有办法强制Mongo驱动程序启动新连接?
答案 0 :(得分:21)
我们现在使用的解决方案是在重启MongoDB后重新启动Apache。不是最好的解决方案,但它有效:)。
答案 1 :(得分:5)
有同样的问题。我可以确认它与驱动程序中的连接池有关,但我没有找到任何有价值的选项。我还可以确认,在db重新启动几个小时后,第一次新的MongoClient()调用会发生这种情况。
我所做的是用try catch包围我的新MongoClient()并重复它。 例如。像这样的东西:
try {
$NoSQLDBMS_Connection = new MongoClient( $NoSQLDBMS_Host );
$NoSQLDBMS_Database = $NoSQLDBMS_Connection->selectDB( $NoSQLDBMS_DBName );
} catch( Exception $e ) {
// retry, mostly when mongodb has been restarted in order to get a new connection
$MaxRetries = 5;
for( $Counts = 1; $Counts <= $MaxRetries; $Counts ++ ) {
try {
$NoSQLDBMS_Connection = new MongoClient( $NoSQLDBMS_Host );
$NoSQLDBMS_Database = $NoSQLDBMS_Connection->selectDB( $NoSQLDBMS_DBName );
} catch( Exception $e ) {
continue;
}
return;
}
// do something fancy here if mongodb is not reachable at all
}
重试最高5次只是偏执狂。我从来没有经历过需要多次重试。
希望它有所帮助。