在Cloud 9上连接到mongodb时出错

vam*_*olu 1 mongodb node.js cloud9-ide

我尝试根据此处提供的说明连接到mongodb ,我得到此错误:

    vamsiampolu1@takenote:~/workspace (master) $ ./mongod
2014-11-17T09:00:10.101+0000 ** WARNING: --rest is specified without --httpinterface,
2014-11-17T09:00:10.101+0000 **          enabling http interface
warning: bind_ip of 0.0.0.0 is unnecessary; listens on all ips by default
2014-11-17T09:00:10.106+0000 [initandlisten] MongoDB starting : pid=2274 port=27017 dbpath=data 64-bit host=vamsiampolu1-takenote-1084968
2014-11-17T09:00:10.106+0000 [initandlisten] db version v2.6.5
2014-11-17T09:00:10.106+0000 [initandlisten] git version: e99d4fcb4279c0279796f237aa92fe3b64560bf6
2014-11-17T09:00:10.106+0000 [initandlisten] build info: Linux build8.nj1.10gen.cc 2.6.32-431.3.1.el6.x86_64 #1 SMP Fri Jan 3 21:39:27 UTC 2014 x86_64 BOOST_LIB_VERSION=1_49
2014-11-17T09:00:10.106+0000 [initandlisten] allocator: tcmalloc
2014-11-17T09:00:10.107+0000 [initandlisten] options: { net: { bindIp: "0.0.0.0", http: { RESTInterfaceEnabled: true, enabled: true } }, storage: { dbPath: "data", journal: { enabled: false } } }
************** 
Unclean shutdown detected.
Please visit http://dochub.mongodb.org/core/repair for recovery instructions.
*************
2014-11-17T09:00:10.107+0000 [initandlisten] exception in initAndListen: 12596 old lock file, terminating
2014-11-17T09:00:10.107+0000 [initandlisten] dbexit: 
2014-11-17T09:00:10.107+0000 [initandlisten] shutdown: going to close listening sockets...
2014-11-17T09:00:10.107+0000 [initandlisten] shutdown: going to flush diaglog...
2014-11-17T09:00:10.107+0000 [initandlisten] shutdown: going to close sockets...
2014-11-17T09:00:10.107+0000 [initandlisten] shutdown: waiting for fs preallocator...
2014-11-17T09:00:10.107+0000 [initandlisten] shutdown: closing all files...
2014-11-17T09:00:10.107+0000 [initandlisten] closeAllFiles() finished
2014-11-17T09:00:10.107+0000 [initandlisten] dbexit: really exiting now
Run Code Online (Sandbox Code Playgroud)

编辑:

我已尝试使用mongod --repairflag.I还尝试执行此脚本,这是我在不关闭mongod正确关闭本地计算机的情况下执行的操作:

   #!/bin/sh
  sudo rm /var/lib/mongodb/mongod.lock
  sudo -u mongodb mongod -f /etc/mongodb.conf --repair
  sudo service mongodb start
Run Code Online (Sandbox Code Playgroud)

它说/var/lib/mongodb/mongod.lock找不到文件.我试图mongodb作为服务启动:

  sudo service mongod start
Run Code Online (Sandbox Code Playgroud)

其中,它要求我使用mongod start同样的消息也失败.我已经读过net.http.enabled应该关闭哪个,因为它可能会增加网络暴露.

我用了一个Ubuntu 12.04基于vagrant框一次,所以我试着用:

 mongodb start
Run Code Online (Sandbox Code Playgroud)

这告诉我这mongodb不是一个有效的命令.

我也试过mongo告诉我:

 vamsiampolu1@takenote:~/workspace (master) $ mongo
 MongoDB shell version: 2.6.5
 connecting to: test
 2014-11-17T11:51:44.752+0000 warning: Failed to connect to 127.0.0.1:27017, reason: errno:111     Connection refused
 2014-11-17T11:51:44.753+0000 Error: couldn't connect to server 127.0.0.1:27017 (127.0.0.1),   connection attempt failed at src/mongo/shell/mongo.js:146
 exception: connect failed
Run Code Online (Sandbox Code Playgroud)

我相信我可能错误地关闭了终端窗口运行mongod,因此无法启动它.但它不会让我做我通常做的事情并继续工作.

我也尝试运行它来查找是否mongod已经运行:

  vamsiampolu1@takenote:~/workspace (master) $ ps ax | grep mongod
  2504 pts/2    S+     0:00 grep --color=auto mongod 
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下命令阻止它运行:

   stop mongod
Run Code Online (Sandbox Code Playgroud)

然后我又跑了一下,发现mongod是否还在运行:

   vamsiampolu1@takenote:~/workspace (master) $ ps ax | grep mongod
   2524 pts/2    S+     0:00 grep --color=auto mongod
Run Code Online (Sandbox Code Playgroud)

当我试图运行时:

      vamsiampolu1@takenote:~/workspace (master) $ mongod --shutdown
      There doesn't seem to be a server running with dbpath: /data/db
Run Code Online (Sandbox Code Playgroud)

当我尝试dbpath手动设置时:

  vamsiampolu1@takenote:~/workspace (master) $ ./mongod --dbpath /data/db
  Error parsing command line:  Multiple occurrences of option "--dbpath"
Run Code Online (Sandbox Code Playgroud)

Mar*_*erg 6

在我看来,你已经做了很多事情而没有真正理解你在做什么.

但基本的理解是必要的.因此,这里有一个逐步指导,以清理环境,并希望修复数据库,注释.你这样做有一个备份,不是吗?

  1. 决定是否要将mongod用作您自己的用户vamsiampolu1或root 用户或专用用户.与流行的看法相反,该sudo命令不是Linux/UNIX等同于"我真的希望你执行这个命令!" 和一脚踩 没有-u参数的sudo 使用root权限执行它的参数 - 进程的有效用户ID将是root.将为用户和组root创建文件和目录(问题中的进程除了root权限).通常,最好为任何守护程序都有一个专用用户,因此您应该使用mongodb,因为这是由ubuntu和10gen包创建的用户.

  2. 现在我们需要确保没有运行mongod:

    vamsiampolu1@takenote:~ $ sudo killall mongod
    
    Run Code Online (Sandbox Code Playgroud)

    (我们希望杀死所有mongod进程,并且因为唯一能够杀死可能属于不同于他自己的用户的进程的用户是root,我们告诉系统以root权限执行此命令)

  3. 我们确保所有文件和目录都属于适当的用户

    vamsiampolu1@takenote:~ $ sudo chown mongodb.mongodb -r /var/lib/mongodb
    
    Run Code Online (Sandbox Code Playgroud)

    (我们希望将/ var/lib/mongodb下面的所有目录的所有者和组以递归方式更改为用户mongodb和group mongodb,我们需要相应的权限才能这样做)

  4. 我们以用户mongodb删除lockfile

    vamsiampolu1@takenote:~ $ sudo -u mongodb rm /var/lib/mongodb/mongod.lock
    
    Run Code Online (Sandbox Code Playgroud)
  5. 接下来,我们将以用户mongodb运行repair命令

    vamsiampolu1@takenote:~ $ sudo -u mongodb mongod -f /etc/mongod.conf --repair
    
    Run Code Online (Sandbox Code Playgroud)

    请注意,-u mongodb修复后系统正常工作至关重要.

    这可能需要一段时间.仔细观察日志文件

     vamsiampolu1@takenote:~ $ tail -n 100 -f /var/log/mongodb/mongod.log
    
    Run Code Online (Sandbox Code Playgroud)

    如果它说[initandlisten] dbexit: really exiting now,那么......

  6. 启动mongod

    vamsiampolu1@takenote:~ $ sudo -u mongodb mongod -f /etc/mongod.conf 
    
    Run Code Online (Sandbox Code Playgroud)

    它现在应该工作.如果没有,请添加最后一次出现的日志文件部分

    [initandlisten] repairDatabase local
    
    Run Code Online (Sandbox Code Playgroud)

    一直到你的问题的结束.