MongoDB работает, но не может подключиться с помощью оболочки - PullRequest
36 голосов
/ 31 октября 2011

CentOS 5.x Linux с MongoDB 2.0.1 (пробовал main и legacy-static)

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 загружается нормально, как и при использовании оболочки 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 для тестирования). Из строки сразу видно, что mongo клиент пытается подключиться через TCP (AF_INET), но, поскольку он локальный и MongoDB создает файловый сокет, есть ли способ сказать клиенту подключиться через него? Или, еще лучше, почему клиент выбрасывает EBADF?

РЕДАКТИРОВАТЬ: мой основной монго конф:

dbpath=/root/mongodb-linux-i686-2.0.1/data
logpath=/root/mongodb-linux-i686-2.0.1/logs/mongo.log
slowms=15
rest=1

Ответы [ 17 ]

39 голосов
/ 14 декабря 2011

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

mongo 127.0.0.1:27017

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

[Ubuntu Linux 11.10 x64 / MongoDB 2.0.1]
20 голосов
/ 28 февраля 2013

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

bind_ip: 127.0.0.1

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

17 голосов
/ 09 февраля 2012

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

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

14 голосов
/ 04 декабря 2012

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

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

http://localhost:28017

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

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

12 голосов
/ 02 августа 2012

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

3 голосов
/ 21 января 2016

Откройте файл /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 открыт в брандмауэре.

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

2 голосов
/ 18 апреля 2012

У меня тоже была эта проблема. Твой журнал MongoDB? Я заметил следующие записи «preallocate» в файле журнала. Как только я увидел последнюю строку «ожидание соединения через порт», я смог подключиться. Обратите внимание, что этот «более быстрый» режим занял 12 минут для инициализации.

William

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
1 голос
/ 20 августа 2015

По умолчанию 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 голос
/ 15 июня 2013

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

1 голос
/ 02 февраля 2012

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

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

1 sudo service mongod start
2 mongo

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

sudo chkconfig --levels 235 mongod on

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...