MongoDB работает, но не может подключиться с помощью оболочки

CentOS 5.x Linux с MongoDB 2.0.1 (пробовал основной и устаревший)

Работает MongoDB:

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

Использование простой оболочки для подключения к серверу не выполняется:

[[email protected] 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 загружается отлично, как и использование оболочки MongoDB с удаленного хоста Linux. Также может быть 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 показывает только один проблемный вызов:

[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?

EDIT: Мой основной 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

Ответ 1

Я думаю, что в этой версии клиента mongoDb есть некоторая конфигурация по умолчанию. Попробуйте запустить:

mongo 127.0.0.1:27017

Странно, но потом я испытал, что проблема исчезла:) (поэтому простая команда "mongo" без каких-либо параметров снова начала работать для меня)

[Ubuntu Linux 11.10 x64 / MongoDB 2.0.1]

Ответ 2

Вы можете проверить свою конфигурацию, чтобы узнать, установлен ли bind_ip

bind_ip: 127.0.0.1

Если это так, это разрешает только локальные логины. Прокомментируйте это и перезапустите mongo, это может помочь.

Ответ 3

У меня была аналогичная проблема, ну на самом деле то же самое (процесс mongo запущен, но не может подключиться к нему). То, что я сделал, было отправлено на мой путь к базе данных и удалил mongod.lock, а затем снова попробовал (перезапустил mongo). После этого все получилось.

Надеюсь, это сработает и для вас. ремонт mongodb на ubuntu

Ответ 4

У меня была такая же проблема. В моем случае сервер MongoDB не работал.

Попробуйте открыть это в своем веб-браузере:

http://localhost:28017

Если вы не можете, это означает, что вам нужно запустить сервер MongoDB.

Запустите mongod на другой вкладке терминала. Затем в основной вкладке запустите mongo, которая является оболочкой, которая подключается к вашему серверу MongoDB.

Ответ 5

Удалите /var/lib/mongodb/mongod.lock, затем введите sudo service mongodb start, затем mongo.

Ответ 6

Откройте файл /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.

Вы также можете прокомментировать строку, если вас не беспокоит безопасность.

Ответ 7

У меня тоже была эта проблема. Ваш журнал MongoDB? Я заметил следующие записи "preallocate" в файле журнала. Как только я увидел последнюю строку "Ожидание соединений на порту", ​​я мог подключиться. Обратите внимание, что этот "более быстрый" режим занял 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

Ответ 8

На самом деле это не ошибка... Что происходит здесь, так это то, что Mongo полагается на демона, чтобы запустить локальный сервер базы данных, поэтому, чтобы "запустить" сервер mongo в вашей оболочке, вам нужно начать сначала служба монго.

Для Fedora Linux (который я использую Distro). Вам нужно выполнить следующие команды:

1 sudo service mongod start
2 mongo

И вот оно! сервер будет запущен. Теперь, если вы хотите, чтобы сервис Mongo Чтобы начать, когда система загружается, вам нужно запустить:

sudo chkconfig --levels 235 mongod on

И это все! Если вы это сделаете, теперь в оболочке вам просто нужно ввести mongo, чтобы для запуска сервера, но в значительной степени это проблема, вы должны сначала запустить SERVICE, а затем SERVER:)

P.S. Команды, которые я опубликовал, могут работать и с другими дистрибутивами linux, а не только в Fedora... В случае, если вам не нужно настраивать некоторые слова в зависимости от используемого дистрибутива;)

Ответ 9

Опираясь на ту же проблему с ошибкой, описанной Гарретом выше. 1. Сервер MongoDB с включенным ведением журнала работает, как показано с помощью команды ps 2. Монгольский клиент или драйвер Mongoose не могут подключиться к базе данных.

Решение: 1. Удаление файла Mongo.lock приводит к нормальной жизни на сервере CentOS. 2. Мы довольно новы в производстве MongoDB в производстве и наблюдаем, что одна и та же проблема возникает несколько раз в неделю. 3. Мы установили расписание cron для регулярной очистки файла блокировки и интимного администрирования, что произошел инцидент.

Поиск исправления ошибки для этой проблемы или любого другого более постоянного способа ее устранения.

Ответ 10

Если ваш bind_ip настроен на что-либо, кроме 127.0.0.1, вам нужно будет добавить ip явно даже с локальной машины. Поэтому просто используйте тот же метод, который вы используете в удаленном поле в локальном поле. По крайней мере, что это для меня.

Ответ 11

По умолчанию mongodb настроен на прослушивание только локального хоста. Выдержка из файла конфигурации mongodb по умолчанию:

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

Нужно прокомментировать bind_ip для прослушивания с внешних объектов.

Вы не сможете добавлять осколки, если вы не начнете слушать нелокальные интерфейсы.

НТН,

Абхай Дандекар

Ответ 12

Не так много ответа, но больше FYI: я просто ударил это и нашел этот вопрос в результате поиска. Вот подробности моего опыта:

Ошибка оболочки

[email protected]:~$ 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 logs показывают

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) испытывал то же самое, когда некоторые соединения были очищены, и доступ снова стал возможным для оболочки (других клиентов)

Ответ 13

Я нашел этот очень полезный.

Если вы получаете следующее сообщение

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")
[email protected]:/var/lib/mongodb$ mongo

Вы должны пытаться запустить службу mongodb как пользователь, отличный от root. Вы должны быть пользователем root. Таким образом, войдите в систему как root, а затем выполните следующую команду следующим образом:

sudo bash

за которым следует

service mongodb start

Ответ 14

Я не вижу, чтобы это имело принятый ответ, поэтому я просто добавлю 2 цента.

У меня была точно такая же проблема только сейчас. Через некоторое время я понял, что заблокировал localhost в своих правилах iptables. Итак, проверьте свой брандмауэр.

Ответ 15

В Ubuntu:

Ср Янв 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):

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

вы можете увидеть другие детали:

[email protected]:~# more /etc/mongodb.conf

Откройте новый терминал, чтобы увидеть результат mongod --config/etc/mongodb.conf & затем введите mongo. Он должен быть запущен или grep

[email protected]:/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 

сейчас

[email protected]:/data# mongo

MongoDB shell version: 2.0.4
connecting to: test

вы получаете оболочку mongoDB

Это не конец истории. Я отправлю метод ремонта, чтобы он запускался автоматически каждый раз, большинство отключений машины разработки каждый день, и виртуальная машина должна была автоматически запускать mongo при следующей загрузке.

Ответ 16

После запуска mongod

$mongod --dbpath <db name>

чтобы получить оболочку

$mongo --shell

Ответ 17

Если версия вашего сервера mongoDB (удаленного сервера) превышает 4.0.3, вы столкнетесь с этой проблемой. Следовательно, вы должны заменить вашу текущую оболочку mongo-client на следующую:

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

Тогда ваш клиент Монго сможет подключить ваш удалить Mongodb