我无法通过外部API或本地mongo
客户端连接到我的mongo数据库,但可以在没有远程主机问题的情况下连接。
mongod
并可通过访问127.0.0.1:27017
确认服务器正在运行我尝试为mongo创建一个全新的数据库目录,以生成一组新的数据库文件,但仍然没有运气 - 因此它不是锁定文件或权限问题。
$ mongo --verbose
MongoDB shell version: 2.4.4
Mon Jun 24 20:11:08.764 versionArrayTest passed
connecting to: test
Mon Jun 24 20:11:08.847 creating new connection to:127.0.0.1:27017
Mon Jun 24 20:11:08.847 BackgroundJob starting: ConnectBG
Mon Jun 24 20:12:11.848 JavaScript execution failed: Error: couldn't connect to server 127.0.0.1:27017 at src/mongo/shell/mongo.js:L112
Mon Jun 24 20:12:11.848 User Assertion: 12513:connect failed
exception: connect failed
我正在运行Ubuntu 12.04,我从10gen repo安装了mongo。一切都在最初运行完美,但在重新启动服务器后,mongo
无法连接。
我的netstat返回:
$ netstat -nap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:10000 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:28017 0.0.0.0:* LISTEN -
答案 0 :(得分:1)
我在CentOs 6.4上遇到了同样的问题(Mongo 2.4.5,但实际上它也发生在其他版本中)。有一些奇怪的线程问题。我调试了mongo并找到了解决方法。它需要mongo重新编译。当虚假唤醒发生时,看起来来自boost库的timed_wait方法返回超时。我不确定bug在哪里:mongo,boost,glibc,linux kernel。
Mongo 2.4.5 在src / mongo / util / background.cpp方法中替换BackgroundJob :: wait
bool BackgroundJob::wait( unsigned msTimeOut ) {
verify( !_status->deleteSelf ); // you cannot call wait on a self-deleting job
scoped_lock l( _status->m );
boost::system_time const endTime = boost::get_system_time()+ boost::posix_time::milliseconds(msTimeOut);
if ( msTimeOut ) {
while ( _status->state != Done ) {
if ( ! _status->finished.timed_wait( l.boost() , endTime ) ){
boost::system_time const curTime=boost::get_system_time();
if((curTime - endTime).total_milliseconds()>0){
return false;
}
else {
LOG( LL_WARNING ) << "backgroundjob " << name() << "warning: spurious wakeup return TIMEOUT code but we want wait "<<(endTime-curTime).total_milliseconds()<<" ms yet! Try again." << endl;
}
}
}
}
else {
while ( _status->state != Done ) {
_status->finished.wait( l.boost() );
}
}
return true;
}
过了一段时间我发现了Perl的其他问题: perl -MCPAN -e'install“DateTime”'
Simple Perl测试失败:
使用严格; 使用警告;
使用Test :: More;
使用DateTime;
{ my $ epochtest = DateTime-&gt; from_epoch(epoch =&gt;'997121000'); 是( $ epochtest-&gt; epoch,997121000, “epoch方法返回正确的值” ); }
我发现如果删除/ etc / localtime文件,Perl和Mongo的问题就会消失!
答案 1 :(得分:0)
我在Ubuntu 14.04上运行mongod 3.0.2时遇到了同样的问题:
MongoDB shell版本:2.4.9 Sun Apr 26 00:57:31.604 versionArrayTest通过 连接到:xxx.xxx.xxx.xxx:27000 / test Sun Apr 26 00:57:31.667创建新连接:xxx.xxx.xxx.xxx:27000 Sun Apr 26 00:57:31.667 BackgroundJob start:ConnectBG Sun Apr 26 00:57:31.668连接连接! Sun Apr 26 00:57:31.671 User Assertion:18:{ok:0.0,errmsg:“auth failed”,代码:18} Sun Apr 26 00:57:31.673错误:18 {ok:0.0,errmsg:“auth failed”,代码:18}在src / mongo / shell / db.js:228 Sun Apr 26 00:57:31.673用户断言:12514:登录失败 Sun Apr 26 00:57:31.673释放1个未收集的N5mongo20DBClientWithCommandsE对象 异常:登录失败
分发来自MMS Mongo: https://mms.mongodb.com/
然后我在我的MMS页面上注意到,在mongod进程下 - &gt;椭圆菜单; 菜单名为: “连接到这个Mongod实例” 返回一个字符串: “/var/lib/mongodb-mms-automation/mongodb-linux-x86_64-3.0.2/bin/mongo RBX1:27000” (RBX1是我的实例,27000是我设置的端口) 一旦我在shell中应用了这个字符串(我添加了额外的用户/密码和authenticationDatabase参数,它就可以了。
我现在可以在本地和远程连接到我的Mongod实例。
您是否通过彩信安装了MongoDB?