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(), индексам и анализу запросов

Короткий чек-лист

  1. Сохраните текущий статус MongoDB.
  2. Перезапустите именно тот процесс, где работает база: mongod, служба Windows, Homebrew service или Docker-контейнер.
  3. Проверьте status.
  4. Выполните db.runCommand({ ping: 1 }).
  5. Проверьте db.serverStatus().uptime.
  6. Если база не поднялась, читайте логи, а не повторяйте рестарт по кругу.

Что почитать дальше

Что почитать дальше по MongoDB

Если нужен общий маршрут по теме, откройте рубрику MongoDB. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x