Достаточно популярная ошибка взволновала многих пользователей СУБД MongoDB, когда они не смогли подключиться к своим серверам с базами данных. Причиной такого сбоя могли быть недавние события компании MongoDB Inc., которые оставили пользователей, с простаивающими серверами баз данных. При попытке подключения через клиент mongosh, сервер выдавал стандартный ответ «mongodb://127.0.0.1:27017/?directconnection=true&serverselectiontimeoutms=2000&appname=mongosh+2.1.1», при наличии локального подключения.
Для решения проблемы необходимо понимать принцип взаимодействия клиента и сервера базы данных. В этом случае и клиент, и сервер находятся на одной машине. Соответственно, обращения от клиента к серверу будут проходить через loopback, однако, в вашем случае это может быть и другой сервер в сети.
Клиент или же утилита mongosh формирует запрос, который передает на порт сервера для попытки подключения. В случае успеха мы увидим интерфейс MongoDB для взаимодействия с сервером, в случае неудачи ответ с ошибкой. Причины могут быть совершенно разными. Начиная от не запущенного демона и заканчивая сетевой недоступностью сервера.
Все действия, представленные в инструкции можно выполнить на базе облачных серверов.
Отключен демон
Для начала проверим работоспособность демона MongoDB с помощью системы управления службами systemd, если в вашей ОС используется иная система, то проверьте с помощью нее:
Как можем видеть из скриншота, служба отключена и не функционирует, попробуем запустить:
Далее проверим состояние запущенного юнита в системе на наличие ошибок:
Отлично, служба была запущена, это мы можем наблюдать по строкам «job for unit finished successfully». Однако не всегда проблема кроется в незапущенном демоне, проблема с конфигурацией MongoDB, так же частая ошибка.
Ошибка подключения и конфигурации
При подключении к серверу проверьте корректность вашего запроса, в ошибке описанной ранее встречается запись «mongodb://127.0.0.1:27017/?directconnection=true», что свидетельствует о подключении к локальному серверу, если вы хотите использовать удаленный сервер, то пропишите следующий синтаксис: mongosh mongodb://myuser:mypassword@123.456.789.0:27017/mydatabase. Конечно, вам необходимо заменить имя, пароль пользователя, а так же IP-адрес и порт с названием вашей базы данных для корректного подключения.
Если это не помогло, то обязательно проверьте сетевую доступность вашего сервера по порту на котором он должен слушать соединения, при помощи утилиты. Однако если у вас ее нет, то установите командой:
Проверим соединение:
На нашем сервере работает служба, соответственно ответ есть, но в вашем кейсе все может быть иначе. Если порт закрыт, то идем в конфиг:
Удостоверимся, что сетевые настройки соответствуют нашим ожиданиям и сервер слушает на правильном порту, адресе. Если нет, то меняем данные, сохраним файл по комбинации Ctrl + O и рестартим нашу службу!
Отсутствие прав у системного пользователя
Для работы MongoDB создает службу, а так же пользователя и указывает в юните, что запуск будет происходить от него. Это позволяет ограничить права ПО до необходимых, а так же контролировать доступ к файлам самой БД. Для проверки принадлежности конфига нашему пользователю в папке хранения пропишем команду:
Слева видим права доступа для трех групп, где указанно, что владелец может писать и читать в файл. Остальные и группа владельца только читать. Владелец в данном случае root, что тоже допустимо, главное чтобы «остальные» категория, в которой находится mongodb имел доступ на чтение или был владельцем с правами. Для выдачи прав используем команду chmod:
После протестируйте соединение еще раз и перезапустите демон mongod!
В целом, понимание причин возникновения данной ошибки и использование соответствующих инструментов для диагностики и решения проблемы помогут успешно восстановить работу MongoDB и устранить проблемы с подключением к серверу баз данных.