web-dev-qa-db-ja.com

MongoDBは実行されているが、シェルを使用して接続できない

MongoDB 2.0.1を備えたCentOS 5.x Linux(メインおよびレガシースタティックの試用)

MongoDBが実行されています:

root     31664  1.5  1.4  81848 11148 ?        Sl   18:40   0:00 ./mongod -f mongo.conf -vvvvv --fork

単純なシェル接続を使用してサーバーに接続できません:

[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シェルを使用する場合と同様に正常にロードされます。 localhost:27017にtelnetすることもできます。これは、ポートがブロックされていないことを意味します。このマシンで実行されている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クライアントを追跡すると、問題のある呼び出しが1つだけ表示されます。

[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の制限はありません(テストのルートとして実行)。 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
36
Garrett

このバージョンのmongoDbクライアントには欠けているデフォルト設定があると思います。実行してみてください:

mongo 127.0.0.1:27017

それは奇妙ですが、その後、私は問題がなくなったことを経験しました:)

[Ubuntu Linux 11.10 x64 / MongoDB 2.0.1]
39
JaKi

Configをチェックして、bind_ipが設定されているかどうかを確認することができます。

bind_ip:127.0.0.1

その場合、これはローカルログインのみを許可します。これをコメントアウトして、mongoを再起動してください。これが役立つ場合があります。

20
Andrew M. Slack

同様の問題がありましたが、実際は同じです(mongoプロセスは実行されていますが、接続できません)。私がしたことは、データベースパスに移動し、mongod.lockを削除してから、もう一度試してみました(mongoを再起動しました)。その後、動作しました。

それがあなたにも役立つことを願っています。 buntuでのmongodbの修復

17

同じ問題がありました。私の場合、MongoDBサーバーは実行されていませんでした。

Webブラウザでこれを開いてみてください。

http://localhost:28017

できない場合、これはMongoDBサーバーを起動する必要があることを意味します。

別の端末タブでmongodを実行します。次に、メインタブでmongoを実行します。これは、MongoDBサーバーに接続するシェルです。

14
Ionică Bizău

削除/var/lib/mongodb/mongod.lock、次にSudo service mongodb start、次にmongo

13
mashuai

ファイル/etc/mongod.confを開き、接続先のマシンのIPをbind_ipに追加します

bind_ip = 127.0.0.1、リモートマシンのIPアドレスはこちら

例:-

bind_ip = 127.0.0.1,192.168.1.5

Mongodbサービスを再起動します。

Sudo service mongod restart

ファイアウォールでmongodbポートが開かれていることを確認してください。

セキュリティに不安がない場合は、行にコメントを付けることもできます。

3
ssv

私もこの問題を抱えていました。 MongoDBのジャーナリングはありますか?ログファイルに次の「事前割り当て」エントリがあることに気付きました。 「ポートでの接続を待っている」最後の行を見たら、接続できました。この「高速」モードでは、初期化に12分かかりました。

ウィリアム

Tue Apr 17 16:48:01 [initandlisten] MongoDB starting : pid=2248 port=27017 dbpath=E:\MongoData 64-bit Host=ME
Tue Apr 17 16:48:01 [initandlisten] db version v2.0.0-rc0, pdfile version 4.5
Tue Apr 17 16:48:01 [initandlisten] git version: 8d4bf50111352cee5a4f1abf25b63442d6c45dc4
Tue Apr 17 16:48:01 [initandlisten] build info: windows (6, 1, 7601, 2, 'Service Pack 1') BOOST_LIB_VERSION=1_42
Tue Apr 17 16:48:01 [initandlisten] options: { bind_ip: "ip", dbpath: "E:\MongoData", directoryperdb: true, journal: true, logpath: "E:\MongoData\mongo.log", quiet: true, rest: true, service: true }
Tue Apr 17 16:48:01 [initandlisten] journal dir=E:/MongoData/journal
Tue Apr 17 16:48:01 [initandlisten] recover : no journal files present, no recovery needed
Tue Apr 17 16:48:02 [initandlisten] preallocateIsFaster=true 9.68
Tue Apr 17 16:48:04 [initandlisten] preallocateIsFaster=true 8.44
Tue Apr 17 16:48:06 [initandlisten] preallocateIsFaster=true 9.68
Tue Apr 17 16:48:06 [initandlisten] preallocateIsFaster check took 4.921 secs
Tue Apr 17 16:48:06 [initandlisten] preallocating a journal file E:/MongoData/journal/prealloc.0
Tue Apr 17 16:52:37 [initandlisten] preallocating a journal file E:/MongoData/journal/prealloc.1
Tue Apr 17 16:56:54 [initandlisten] preallocating a journal file E:/MongoData/journal/prealloc.2
Tue Apr 17 17:01:42 [initandlisten] waiting for connections on port 27017
Tue Apr 17 17:01:42 [websvr] admin web console waiting for connections on port 28017
2
William Biesty

デフォルトでは、mongodbはlocalhostのみをリッスンするように設定されています。 mongodbデフォルト設定ファイルからの抜粋:

# Listen to local interface only. Comment out to listen on all interfaces.
bind_ip=127.0.0.1

外部エンティティーからリッスンするには、bind_ipにコメントする必要があります。

非ローカルインターフェイスでリッスンを開始しない限り、シャードを追加することはできません。

HTH、

アブヘイ・ダンデカール

1
Abhay Dandekar

Bind_ipが127.0.0.1以外に設定されている場合、ローカルマシンからでも明示的にIPを追加する必要があります。そのため、ローカルボックスのリモートボックスで使用しているのと同じ方法を使用するだけです。少なくともそれは私にとってそれでした。

1
user2487889

これは実際にはエラーではありません...ここで起こることは、Mongoがローカルデータベースサーバーを実行するためにdaemonに依存していることです。シェルでmongoサーバーを「起動」するには、mongoサービスを開始する必要があります最初。

Fedora Linux(私が使用しているディストリビューションです)これらのコマンドを実行する必要があります:

1 Sudo service mongod start
2 mongo

そして、あなたはそれを持っています!サーバーが実行されます。さて、システムの起動時にMongoサービスを開始したい場合は、実行する必要があります:

Sudo chkconfig --levels 235 mongod on

そして、それだけです!これを行うと、シェルでサーバーを起動するためにmongoを入力するだけで、それはほとんどそれ、問題は、最初にSERVICEを起動し、次にSERVERを起動する必要があることです:)

追伸私が投稿したコマンドは、Fedoraだけでなく、他のLinuxディストリビューションでも動作する可能性があります...場合によっては、いくつかの単語を微調整する必要があります使用しているディストリビューション;)

1
Jmlevick

上記のギャレットが説明したエラーと同じ問題に直面しています。 1. psコマンドを使用して表示されるように、ジャーナリングが有効になっているMongoDBサーバーが実行されています。2. MongoクライアントまたはMongooseドライバーがデータベースに接続できません。

解決策: 1. Mongo.lockファイルを削除すると、CentOSサーバーで通常の状態に戻るようです。 2.実稼働環境でMongoDBを実行するのはかなり新しく、週に2、3回同じ問題が発生しています。 3.ロックファイルを定期的にクリーンアップし、インシデントが発生したことを管理者に知らせるために、cronスケジュールを設定しました。

この問題のバグ修正またはそれを解決するためのその他の恒久的な方法を探しています。

1
Anthony

MongoDBサーバー(リモートサーバー)のバージョンが4.0.3よりも大きい場合、この問題に直面します。したがって、現在のmongo-clientシェルを以下のmongoに置き換える必要があります。

Sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
echo "deb [ Arch=AMD64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.0 multiverse" | Sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
Sudo apt-get update
Sudo apt-get install -y mongodb-org

その後、mongoクライアントはremove mongodbを接続できるようになります

0
divyang4481

Ubuntuの場合:

1月27日水曜日10:21:32エラー:サーバー127.0.0.1に接続できませんでしたShell/mongo.js:84例外:接続に失敗しました

解決

次のコマンドでmongodbが実行されているかどうかを確認します。

ps -ef | grep mongo

Mongoが実行されていない場合、次のようになります:

 vimal     1806  1698  0 10:11 pts/0    00:00:00 grep --color=auto mongo

Mongoデーモンが存在しないことがわかります。

次に、構成ファイル(root prievを使用)から起動します。

root@vimal:/data# mongod --config /etc/mongodb.conf &
[1] 2131
root@vimal:/data# all output going to: /var/log/mongodb/mongodb.log

他の詳細を見ることができます:

root@vimal:~# more /etc/mongodb.conf

新しいターミナルを開いてmongod --config /etc/mongodb.confの結果を確認し、mongoと入力します。実行中またはgrepである必要があります

root@vimal:/data# ps -ef | grep mongo

root      3153     1  2 11:39 ?        00:00:23 mongod --config /etc/mongodb.conf
root      3772  3489  0 11:55 pts/1    00:00:00 grep --color=auto mongo 

いま

root@vimal:/data# mongo

MongoDB Shell version: 2.0.4
connecting to: test

mongoDBシェルを取得します

これで話は終わりではありません。毎回自動的に起動し、ほとんどの開発マシンが毎日シャットダウンし、VMが次回の起動時にmongoを自動的に起動する必要があるように、修復方法を投稿します。

0
vimal krishna

まだ回答が受け入れられていないので、2セントを追加します。

私は今まさにまったく同じ問題を抱えていました。しばらくして、iptablesルールでlocalhostがロックアウトされたことに気付きました。ファイアウォールを確認してください。

0
Hans N. Hjort

そんなに答えではなく、もっと参考になりました。これを見つけて、検索の結果としてこの質問を見つけました。私の経験の詳細は次のとおりです。

シェルエラー

markdsievers@ip-xx-xx-xx-xx:~$ mongo
MongoDB Shell version: 2.0.1
connecting to: test
Wed Dec 21 03:36:13 Socket recv() errno:104 Connection reset by peer 127.0.0.1:27017
Wed Dec 21 03:36:13 SocketException: remote: 127.0.0.1:27017 error: 9001 socket exception [1] server [127.0.0.1:27017] 
Wed Dec 21 03:36:13 DBClientCursor::init call() failed
Wed Dec 21 03:36:13 Error: Error during mongo startup. :: caused by :: DBClientBase::findN: transport error: 127.0.0.1 query: { whatsmyuri: 1 } Shell/mongo.js:84
exception: connect failed

Mongoログが明らかに

Wed Dec 21 03:35:04 [initandlisten] connection accepted from 127.0.0.1:50273 #6612
Wed Dec 21 03:35:04 [initandlisten] connection refused because too many open connections: 819

これはおそらく、他の回答(JaKi)が同じことを経験しており、一部の接続がパージされ、シェル(他のクライアント)のアクセスが再び可能になったことを示している可能性があります

0
markdsievers

this は非常に便利だと思いました。

次のメッセージが表示される場合

start: Rejected send message, 1 matched rules; type="method_call", sender=":1.84" (uid=1000 pid=3215 comm="start mongodb ") interface="com.ubuntu.Upstart0_6.Job" member="Start" error name="(unset)" requested_reply="0" destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")
shriprasad@shriprasad-HP-430-Notebook-PC:/var/lib/mongodb$ mongo

Root以外のユーザーとしてmongodbサービスを開始しようとしている必要があります。 rootユーザーである必要があります。したがって、ルートとしてログインし、次のコマンドを実行します。

Sudo bash

に続く

service mongodb start
0
Shriprasad

モンゴッドを始めた後

$mongod --dbpath <db name>

シェルを取得する

$mongo --Shell
0
goutham2027