带有MongoDB 2.0.1的CentOS 5.x Linux(尝试过main和legacy-static)
MongoDB正在运行:
root 31664 1.5 1.4 81848 11148 ? Sl 18:40 0:00 ./mongod -f mongo.conf -vvvvv --fork
使用简单的shell连接到服务器失败:
[root@xxxx bin]# ./mongo
MongoDB shell version: 2.0.1
connecting to: test
Mon Oct 31 18:41:32 Error: couldn't connect to server 127.0.0.1 shell/mongo.js:84
exception: connect failed
端口28017上的Web界面加载正常,就像使用来自远程Linux主机的MongoDB shell一样 . 也可以telnet到localhost:27017,这意味着没有端口被阻止 . 此机器上没有运行SELinux . 我也试过明确指定 localhost:2017/db
无济于事 .
$ ./mongo remote-ip:27017
MongoDB shell version: 2.0.1
connecting to: remote-ip:27017/test
> show dbs
local 0.03125GB
>
日志完全是主题:
.....
Mon Oct 31 18:40:34 [initandlisten] fd limit hard:1024 soft:1024 max conn: 819
Mon Oct 31 18:40:34 [initandlisten] waiting for connections on port 27017
Mon Oct 31 18:40:34 BackgroundJob starting: snapshot
Mon Oct 31 18:40:34 BackgroundJob starting: ClientCursorMonitor
Mon Oct 31 18:40:34 BackgroundJob starting: PeriodicTask::Runner
Mon Oct 31 18:40:34 [websvr] fd limit hard:1024 soft:1024 max conn: 819
Mon Oct 31 18:40:34 [websvr] admin web console waiting for connections on port 28017
支持mongo shell客户端只显示一个有问题的调用:
[pid 31708] connect(4, {sa_family=AF_INET, sin_port=htons(27017), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EBADF (Bad file descriptor)
文件系统很干净,没有ulimit限制(以root身份运行以进行测试) . 我可以从strace看到 mongo
客户端正在尝试通过TCP连接( AF_INET
),但由于它是本地的并且MongoDB创建了一个文件套接字,有没有办法告诉客户端通过它连接?或者更好的是,为什么客户会投掷EBADF?
编辑:我的基本Mongo conf:
dbpath=/root/mongodb-linux-i686-2.0.1/data
logpath=/root/mongodb-linux-i686-2.0.1/logs/mongo.log
slowms=15
rest=1
16 回答
我认为这个版本的mongoDb客户端缺少一些默认配置 . 尝试运行:
这很奇怪,但后来我经历了这个问题就消失了:)(所以简单的命令'mongo'没有任何params开始为我工作了)
您可能需要检查配置以查看是否已设置bind_ip
如果是,那么这只允许本地登录 . 对此进行评论并重新启动mongo,这可能有所帮助 .
我有一个类似的问题,实际上是相同的(mongo进程正在运行,但无法连接到它) . 我做了什么去了我的数据库路径并删除了mongod.lock,然后再次尝试(重新启动mongo) . 之后它起作用了 .
希望它也适合你 . mongodb repair on ubuntu
我有同样的问题 . 在我的情况下 MongoDB 服务器没有运行 .
尝试在Web浏览器中打开它:
如果你不能,这意味着你必须启动MongoDB服务器 .
在另一个终端选项卡中运行
mongod
. 然后在主选项卡中运行mongo
,它是连接到MongoDB服务器的shell .删除
/var/lib/mongodb/mongod.lock
,然后发出sudo service mongodb start
,然后发出mongo
.我也有这个问题 . 你的MongoDB是日记吗?我注意到日志文件中有以下“preallocate”条目 . 一旦我看到最后一行“等待端口连接”,我就可以连接了 . 请注意,这种“更快”的模式需要12分钟来初始化 .
威廉
打开文件/etc/mongod.conf并将您要连接的机器的IP添加到 bind_ip
bind_ip = 127.0.0.1,你的远程机器IP地址在这里
例如: -
重启mongodb服务:
确保在防火墙中打开mongodb端口 .
如果您不担心安全性,也可以对该行进行评论 .
这实际上不是错误......这里发生的是Mongo依赖守护进程来运行本地数据库服务器,所以为了在shell中使用mongo服务器,你必须首先启动mongo服务 .
对于 Fedora Linux (我使用的是Distro)你必须运行这些命令:
你有它!服务器将要运行 . 现在,如果您希望在系统启动时启动Mongo服务,则必须运行:
就这样!如果你这样做,现在在shell中你只需要键入 mongo 以启动服务器,但这就是它,问题是你必须首先启动SERVICE然后再启动SERVER :)
附:我发布的命令也可能适用于其他Linux发行版,而不仅仅是在fedora中...如果不是,你可能需要调整一些单词取决于你正在使用的发行版;)
面对与Garrett上面描述的错误相同的问题 . 1.启用了日记功能的MongoDB服务器正在运行,如使用ps命令2. Mongo客户端或Mongoose驱动程序无法连接到数据库 .
Solution : 1.删除Mongo.lock文件似乎可以让CentOS服务器恢复正常生活 . 2.我们在 生产环境 中运行MongoDB是相当新的,并且已经看到同样的问题每周出现几次 . 3.我们设置了一个cron计划,以定期清理锁定文件并向管理员发出事件已发生的通知 .
正在搜索此问题的错误修复或任何其他更永久的解决方法 .
如果bind_ip设置为127.0.0.1以外的任何值,那么您甚至需要从本地计算机显式添加ip . 因此,只需使用您在本地盒子上的远程盒子上使用的相同方法 . 至少那是为我做的 .
默认情况下,mongodb配置为仅侦听localhost . 摘自mongodb默认配置文件:
需要注释bind_ip以从外部实体进行侦听 .
除非您开始侦听非本地接口,否则您将无法添加分片 .
HTH,
Abhay Dandekar
不是一个答案,而是更多的一个FYI:我只是点击这个,发现这个问题是搜索的结果 . 以下是我的经历细节:
Shell错误
Mongo日志显示
这或许表明另一个答案(JaKi)正在经历同样的事情,其中一些连接被清除,并且再次访问shell(其他客户端)
我还没有看到这个已经接受的答案,所以我只需加2美分 .
我刚才有同样的问题 . 过了一会儿,我意识到我已经在我的iptables规则中锁定了localhost . 所以,检查你的防火墙 .
在Ubuntu上:
1月27日星期三10:21:32错误:无法连接到服务器127.0.0.1 shell / mongo.js:84异常:连接失败
解
通过以下命令查找mongodb是否正在运行:
如果mongo没有运行,你会得到:
你看到mongo守护进程不在那里 .
然后通过配置文件(使用root priev)启动它:
你可以看到其他细节:
打开一个新终端,查看mongod --config /etc/mongodb.conf的结果,然后键入mongo . 它应该运行或grep
现在
你得到了mongoDB shell
这不是故事的结局 . 我将发布修复方法,以便每次都自动启动,大多数开发机器每天都会关闭,并且VM必须在下次启动时自动启动mongo .
启动mongod后
获得shell
我发现this非常有用 .
如果您收到以下消息
您必须尝试以root用户之外的用户身份启动mongodb服务 . 您必须是root用户 . 因此,以root身份登录,然后运行以下命令,如下所示:
其次是