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