Відмовлено в підключенні до MongoDB errno 111


78

У мене є сервер Linode, на якому запущено екземпляр Ubuntu 12.04 LTS та MongoDB (служба працює, і МОЖЕ підключатися локально), до якого я не можу підключитися із зовнішнього джерела.

Я додав ці два правила до своїх IP-таблиць, де <ip-адреса> - це сервер, до якого я хочу підключитися (як зазначено в цьому посиланні на MongoDB ):

iptables -A INPUT -s < ip-address > -p tcp --destination-port 27017 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -d < ip-address > -p tcp --source-port 27017 -m state --state ESTABLISHED -j ACCEPT

І я бачу правило в моїй IP-таблиці, що дозволяє підключення на 27017 до і з <ip-адреси>, однак, коли я намагаюся підключитися з, <ip-адреси> до моєї бази даних mongo за допомогою такої команди:

mongo databasedomain/databasename -u username -p password

Я отримую цю помилку:

2014-07-22T23:54:03.093+0000 warning: Failed to connect to databaseserverip:27017, reason: errno:111 Connection refused 2014-07-22T23:54:03.094+0000 Error: couldn't connect to server < ip address >:27017 (databaseserverip), connection attempt failed at src/mongo/shell/mongo.js:148 exception: connect failed

Будь-яка допомога ДУЖЕ ЦІНИМА !!!! Дякую!!!


Ви впевнені, що другий безбожник працює? Чи можете ви підключитися до нього локально?
Sammaye

mongod працює локально, і так, я можу підключатися локально.
dbcooper

Відповіді:


126

Дякуємо за допомогу всім!

Виявляється, це був непростий конфлікт. Два правила з переліком відкритого порту (що призвело до закритого порту).

Однак один із коментарів ака, а інший - manu2013 - це проблеми, з якими я б зіткнувся, якби не конфлікт.

Так! Завжди пам’ятайте про редагування /etc/mongod.confфайлу та налаштування bind_ip = 0.0.0.0для того, щоб здійснювати зовнішні з’єднання.

Крім того, переконайтеся, що у вашому iptable немає суперечливих правил для порту, який хоче mongo (див. Посилання на сайті mongodb, щоб правильно налаштувати iptables).


1
Або просто використовуйте 127.0.0.1 у connectionString, замість localhost, і підключайтеся внутрішньо ...
Stefan Steiger

7
Не забудьте зробитиsudo service mongod restart
mqklin

9
Не робіть bind_ip = 0.0.0.0у виробництві !!!! Або ви публічно виставите свій сервер ...
vinyll,

@vinyll, то вам слід обмежитися певними ips за допомогою UFW (брандмауер)
Raz

48

Спробуйте наступне:

sudo rm /var/lib/mongodb/mongod.lock
sudo service mongodb restart

3
Нещастить. Проблема з’єднання все ще виникає. Дякую за спробу.
dbcooper

3
Чи ваш сервер MongoD зобов’язаний слухати всі інтерфейси? 2.6.x за замовчуванням встановлено для прослуховування лише на localhost. Ви можете підтвердити це "netstat -an | grep 27017", і воно повинно показати, до яких усіх IP-адрес прив'язаний mongod.
aks

2
Переконайтеся, що у вашому конфігураційному файлі mongodb.conf налаштування bindIp (bind_ip для попередніх версій) встановлено для прослуховування всіх інтерфейсів, присвоївши значення 0.0.0.0. За замовчуванням він слухає лише на localhost, оскільки значенням за замовчуванням є 127.0.0.1.
manu2013

іноді потрібно видалити mongodb-<port>.sockфайл. в моєму випадку він знаходиться в папці / tmp
Матан

44

Ці команди виправили проблему для мене,

sudo rm /var/lib/mongodb/mongod.lock
sudo mongod --repair
sudo service mongod start
sudo service mongod status

Якщо ви стоїте за проксі-сервером, використовуйте: -
export http_proxy = "http: // username: password@company.com: port /"
export https_proxy = "http: // username: password@company.com: port /"

Довідково: https://stackoverflow.com/a/24410282/4359237


Якщо я запустив цю команду, це видаляє дані, які я зберігав у базі даних
c74ckds

@devend Це не повинно, оскільки команда відновлення запускає команду repairDatabase у всіх базах даних. repairDatabase: перевіряє та виправляє помилки та невідповідності у зберіганні даних. repairDatabase є аналогом команди fsck для файлових систем. Довідка
sk1pro99

16

Для Ubuntu Server 15.04 та 16.04 вам потрібно виконати лише цю команду

sudo apt-get install --reinstall mongodb


3

Ще один варіант - просто відремонтувати свою базу даних так (примітка: спочатку слід створити каталог db0):

mongod --dbpath /var/lib/mongodb/ --repairpath /var/lib/mongodb/db0

Це також прийнятний варіант у виробничих середовищах ...


2

У мене теж була та сама проблема. Створіть каталог у dbpath. У моєму випадку в / data / db не було каталогу. Отже, я створив його. Тепер він працює. Обов’язково надайте дозвіл на цей каталог.


2

Для мене зміна права власності на / var / lib / mongodb та /tmp/mongodb-27017.sock на mongodb була правильним шляхом.

Просто зробіть:

sudo chown -R mongodb:mongodb /var/lib/mongodb

і потім:

sudo chown mongodb:mongodb /tmp/mongodb-27017.sock

а потім запустіть або перезапустіть сервер mongodb:

sudo systemctl start mongod

або

sudo systemctl restart mongod

і перевірити стан

sudo systemctl status mongod

1

У моєму випадку попередня версія була 3.2. Я перейшов до версії 3.6, але файли даних були несумісні з новою версією, тому я видалив усі файли даних, оскільки вони не використовувались для мене та його робіт.

Ви можете перевірити журнали за допомогою /var/log/mongodb


MongoDB слід послідовно модернізувати до кожної основної версії, поки ви не досягнете цілі. У цьому випадку вам потрібно спочатку оновити до 3.4, а також потрібно налаштувати featureCompatibilityVersion: docs.mongodb.com/manual/release-notes/3.6-upgrade-standalone Роблячи це, вам не потрібно видаляти файли даних , що абсолютно неможливо, якщо у вас велика база даних.
sezanzeb

1

Я дотримуюсь інструкцій цього підручника щодо встановлення

Як встановити MongoDB на Ubuntu 16.04

У мене була та сама помилка. Нарешті, я з’ясував, що мені потрібно встановити номер порту

Номер порта за замовчуванням для команди mongo - 27017

Але за замовчуванням номер порту в mongo.conf - 29999



0

Незважаючи на те, що порт відкритий, MongoDB наразі слухає лише локальну адресу 127.0.0.1. Щоб дозволити віддалені підключення, додайте загальнодоступну IP-адресу свого сервера до mongod.conf файлу .

Відкрийте файл конфігурації MongoDB у вашому редакторі:

sudo nano /etc/mongodb.conf

Додайте IP-адресу вашого сервера до значення bindIP:

...
logappend=true

bind_ip = 127.0.0.1,your_server_ip
#port = 27017

...

Зверніть увагу, що тепер усі, хто має ім’я користувача та пароль, можуть увійти до вашої БД, і ви хочете цього уникнути, обмеживши з'єднання лише для певних IP-адрес. Це можна зробити за допомогою брандмауера (прочитайте про службу UFW в Google). Але коротше це має бути приблизно так:

sudo ufw allow from YOUR_IP to any port 27017
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.