MongoDB
Как перезапустить MongoDB безопасно: команды, проверка и ошибки
Чтобы перезапустить MongoDB, нужно перезапустить не базу как набор коллекций, а серверный процесс mongod. На Linux это чаще всего служба mongod, на Windows — служба MongoDB Server, на macOS — сервис Homebrew, в Docker — контейнер. После перезапуска обязательно проверьте, что MongoDB снова принимает подключения: выполните mongosh, затем db.runCommand({ ping: 1 })
Главная ошибка новичков — выполнить рестарт вслепую и сразу идти в приложение. Так можно не заметить, что сервер не поднялся, порт занят, путь к данным изменился или приложение подключается к неактуальной строке подключения
Когда нужна безопасная перезагрузка MongoDB
Если MongoDB стоит на учебном ноутбуке и в базе нет важных данных, перезапуск обычно занимает пару минут: остановили службу, запустили снова, проверили ping. Но в реальном проекте лучше действовать аккуратнее: сначала понять, где именно запущена база, затем перезапустить правильный процесс и только после этого проверять приложение
В этом разборе вы пройдете весь порядок действий: подготовка перед рестартом, команды для Linux, Windows, macOS и Docker, проверка через mongosh, чтение статуса и разбор ошибок, если MongoDB после перезапуска не поднялась
Перед перезапуском
Если MongoDB используется в учебном проекте на локальной машине, достаточно закрыть активные операции и перезапустить службу. Если база работает в рабочем сервисе, сначала проверьте три вещи
Во-первых, поймите, есть ли сейчас запись данных. Не перезапускайте сервер во время миграции, импорта большого JSON, построения индекса или массового обновления документов
Во-вторых, сохраните текущий статус:
mongosh
db.runCommand({ ping: 1 })
db.serverStatus().uptime
ping покажет, что сервер отвечает. uptime пригодится, чтобы убедиться, что после рестарта время работы действительно сбросилось
В-третьих, держите под рукой логи. Именно логи обычно объясняют, почему MongoDB не стартует после перезапуска: ошибка прав на папку данных, занятый порт, неверный конфиг, нехватка места на диске
Linux: перезапустить MongoDB через systemctl
На современных Linux-серверах MongoDB Community Server обычно работает как служба mongod
sudo systemctl restart mongod
Проверьте статус:
sudo systemctl status mongod
Если нужно остановить и запустить отдельно:
sudo systemctl stop mongod
sudo systemctl start mongod
Проверка через shell:
mongosh
db.runCommand({ ping: 1 })
Если команда возвращает ok: 1, сервер поднялся и принимает команды
Windows: перезапустить службу MongoDB Server
Если MongoDB установлена как Windows Service, откройте Services, найдите MongoDB Server и нажмите Restart. Это самый понятный способ для новичка
Через PowerShell можно проверить состояние службы:
Get-Service MongoDB
Перезапуск:
Restart-Service MongoDB
Если служба называется иначе, посмотрите список служб:
Get-Service *Mongo*
После рестарта откройте mongosh:
mongosh
И выполните:
db.runCommand({ ping: 1 })
macOS: перезапуск через Homebrew
Если MongoDB ставили через Homebrew, сервис обычно управляется через brew services
brew services restart mongodb-community
Если установлена конкретная версия, имя сервиса может содержать номер версии. Посмотрите список:
brew services list
Проверка такая же:
mongosh
db.runCommand({ ping: 1 })
Docker: перезапустить контейнер MongoDB
Если MongoDB запущена в Docker, перезапускайте контейнер, а не локальную службу
docker ps
Найдите контейнер с MongoDB и выполните:
docker restart mongo
Если контейнер называется иначе:
docker restart <container_name>
Проверка внутри контейнера:
docker exec -it mongo mongosh
db.runCommand({ ping: 1 })
Если контейнер после рестарта сразу останавливается, смотрите логи:
docker logs mongo
Как понять, что MongoDB действительно перезапустилась
Одного сообщения active или running мало. Проверьте три уровня
Сначала служба или контейнер:
sudo systemctl status mongod
Затем подключение:
mongosh
db.runCommand({ ping: 1 })
И наконец uptime:
db.serverStatus().uptime
Если uptime стал маленьким, сервер действительно стартовал заново
Частые ошибки после перезапуска
MongoDB не стартует
Симптом: systemctl status mongod показывает failed
Причина чаще всего в конфиге, правах на папку данных, занятом порте или нехватке места
Что сделать:
sudo journalctl -u mongod -n 80
Посмотрите последние строки. Не исправляйте наугад: MongoDB обычно пишет конкретную причину
mongosh не подключается к localhost:27017
Симптом: shell пишет, что не может выбрать сервер или подключиться
Проверьте, запущена ли служба, слушает ли порт 27017, не меняли ли вы bindIp и port в конфиге. Если MongoDB работает в Docker, убедитесь, что порт проброшен наружу
После рестарта приложение все равно падает
MongoDB может быть запущена, но приложение подключается не туда. Проверьте connection string в .env: хост, порт, имя базы, логин, пароль и параметры аутентификации
Рестарт не помог при медленных запросах
Перезапуск не лечит плохие индексы, тяжелые агрегации и неудачную структуру документов. Если база тормозит, после проверки запуска переходите к explain(), индексам и анализу запросов
Короткий чек-лист
- Сохраните текущий статус MongoDB.
- Перезапустите именно тот процесс, где работает база:
mongod, служба Windows, Homebrew service или Docker-контейнер. - Проверьте
status. - Выполните
db.runCommand({ ping: 1 }). - Проверьте
db.serverStatus().uptime. - Если база не поднялась, читайте логи, а не повторяйте рестарт по кругу.
Что почитать дальше
- Как установить MongoDB Community Server и проверить, что база работает
- MongoDB простыми словами: создаем первую коллекцию
- MongoDB Compass: подключение и первая коллекция без командной строки
- MongoDB в Docker Compose: локальная база без установки в систему
Что почитать дальше по MongoDB
Если нужен общий маршрут по теме, откройте рубрику MongoDB. Для соседних задач пригодятся эти разборы:
- Как перезапустить MongoDB и проверить статус
- Как расшифровать лог MongoDB и понять причину ошибки
- Discord bot на Python и MongoDB: как задать проверку
- Failed to start MongoDB database server: что проверить