即使mongod正在运行,也无法在本地连接到mongodb

时间:2013-06-25 03:30:34

标签: mongodb ubuntu ubuntu-12.04

我无法通过外部API或本地mongo客户端连接到我的mongo数据库,但可以在没有远程主机问题的情况下连接。

  • 我已启动mongod并可通过访问127.0.0.1:27017确认服务器正在运行
  • 我跟着this answer没有运气
  • 我尝试为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      -  

2 个答案:

答案 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?