← Все статьи

MongoDB: шпаргалка администратора — пользователи, реплики, бэкап

Автор: Юрий Нефёдов, системный инженер · 14.10.2021 · обновлено 24.10.2026

Подборка команд для обслуживания MongoDB. Команды вида db.… и rs.… выполняются в консоли mongo или mongosh, команды mongodump и mongorestore — в обычной командной строке. Комментарии в консоли MongoDB пишутся через //.

Пользователи и роли

Создать администратора с полными правами:

use admin
db.createUser(
  { user: "username",
    pwd: "password",
    roles: [ { role: "root", db: "admin" } ] })

Изменить роли пользователя, например оставить только чтение одной базы:

db.updateUser( "username",
               {

                 roles : [
                           { role : "read", db : "database"  }
                         ]
                }
             )

Посмотреть пользователей и сменить пароль:

show users                                            // выполняется на основном узле
db.changeUserPassword("accountUser", "НовыйПароль")

Репликация

Насколько реплики отстают от основного узла:

rs.printSecondaryReplicationInfo()

Сделать узел предпочтительным основным: поднять ему приоритет. После применения узел с наибольшим приоритетом станет основным на ближайших выборах:

cfg = rs.conf()                 // текущая конфигурация
cfg.members[0].priority = 2     // приоритет узла с индексом 0
rs.reconfig(cfg)                // применить

Подключения

Список клиентов, подключённых к серверу:

db.currentOp(true).inprog.forEach(function(d){if (d.client)printjson(d.client)})

Число подключений с каждого IP-адреса и общий итог. Удобно, когда нужно найти приложение, которое открывает слишком много соединений:

db.currentOp(true).inprog.reduce((accumulator, connection) => { ipaddress = connection.client ? connection.client.split(":")[0] : "unknown"; accumulator[ipaddress] = (accumulator[ipaddress] || 0) + 1; accumulator["TOTAL_CONNECTION_COUNT"]++; return accumulator; }, { TOTAL_CONNECTION_COUNT: 0 })

Бэкап и восстановление

Бэкап набора реплик с вторичного узла в один архивный файл. Ключ --oplog сохраняет изменения, сделанные во время копирования, поэтому бэкап получается согласованным. Вывод утилиты записывается в файл журнала:

mongodump --uri="mongodb://username:password@host1:27017,host2:27017,host3:27017/?replicaSet=rs_name&readPreference=secondary" --oplog --archive="/backup/mongo.archive" > /backup/mongodump.log 2>&1

Восстановление одной базы из такого архива на другой сервер:

mongorestore --username username mongodb://host_target:27017 --archive="/backup/mongo.archive" --nsInclude="Database.*"

Медленные запросы и журнал

Посмотреть настройки профилирования и записывать в журнал сервера запросы дольше 2,5 секунды, не включая сам профилировщик:

db.getProfilingStatus()
db.setProfilingLevel(0, 2500)

Начать новый файл журнала сервера, например перед разбором проблемы:

db.adminCommand( { logRotate : 1 } )

Остановка сервера и повреждённая база

Корректно остановить сервер, команда выполняется в базе admin:

use admin
db.shutdownServer()

Если база повреждена, служба при запуске может долго восстанавливать данные, а systemd обрывает её по тайм-ауту. Отключите тайм-аут запуска (systemctl edit mongod), и у базы будет время восстановиться, иногда на это уходит несколько часов:

[Service]
TimeoutSec=0

Удалить все документы из коллекции

Команда удаляет все документы коллекции без возможности отмены, сама коллекция и индексы остаются. Подробнее — в документации MongoDB:

use sample_mflix
db.collection_name.deleteMany({})

Нужна помощь с настройкой?

Если задача сложнее, чем в статье, напишите мне. Первая консультация бесплатная.