Чато используемые команды, файлы дампа сохранются на хосте
Dump всех баз даных в контейнере agis-mongo-db
$ nohup docker exec -i agis-mongo-db sh -c "mongodump --gzip --archive" > db_dump.gz 2>db_dump.log &
$ nohup docker exec -i agis-mongo-db-bil sh -c "mongodump --gzip --archive" > db-bil_dump.gz 2>db-bil_dump.log &
Dump всех баз даных в контейнере agis-mongo-db. Если в БД установлен пароль, то для бакапа нужен пользователь agis-dump с ролью backup
$ nohup docker exec -i agis-mongo-db sh -c "mongodump --username=agis-dump --password=i99xfeiyZ1kF --gzip --archive" > db_dump.gz 2>db_dump.log &
$ nohup docker exec -i agis-mongo-db sh -c "mongodump --username agis --password i99xfeiyZ1kF --authenticationDatabase admin --gzip --archive" > db_dump.gz 2>db_dump.log &
Restore всех баз даных из db_dump.gz в контейнер agis-mongo-db
$ nohup docker exec -i agis-mongo-db sh -c 'mongorestore --gzip --archive' < db_dump.gz 2>db_restore.log &
Копирование коллекций внутри одной базы
$ docker exec -it agis-mongo-db-bil sh
# mongodump --archive --db=agisbil --collection=client-facility | mongorestore --archive --nsFrom='agisbil.client-facility' --nsTo='agisbil.client-facility-copy'
# mongodump --archive --db=agisbil --collection=client-subject | mongorestore --archive --nsFrom='agisbil.client-subject' --nsTo='agisbil.client-subject-copy'
# mongodump --archive --db=agisbil --collection=client-rel-subject-facility-copy | mongorestore --archive --nsFrom='agisbil.client-rel-subject-facility-copy' --nsTo='agisbil.client-rel-subject-facility'
Mongodump, файлы дампа сохранются в контейнере
$ docker exec agis-mongo-db sh -c "mongodump --archive=/data/db/db_dump"
$ docker exec agis-mongo-db sh -c "mongodump --gzip --archive=/data/db/db_dump.gz"
Mongodump, запуск внутри контейнера
# mongodump --gzip --archive=./db_dump.tgz &
# mongodump --archive=./db_dump &
# mongodump --archive=test.20150715.archive --db=test
Mongorestore запуск с хоста
docker exec -i agis-mongo-db sh -c 'mongorestore --archive' < db_dump
docker exec -i agis-mongo-db sh -c 'mongorestore --gzip --archive' < db_dump.gz
docker exec -i mongodb sh -c 'mongorestore -u root -p 12345678 --archive' < db_dump
Mongorestore запуск внутри контейнера
# mongorestore --gzip --archive ./db_dump.tgz &
# mongorestore --host=localhost --port=40200 --db=lb-address-service ./lb-address-service
# mongorestore --host=localhost --port=40200 --db=zander ./zander
$ docker exec -i agis-mongo-db sh -c "mongorestore /data/db/dump/lb-scada-service-2020-05-12-1630/"
Mongorestore запуск внутри контейнера, можно отключаться от сессии ssh, логи сохраняться внутри контейнера
docker exec -d agis-mongo-db sh -c "mongorestore /data/db/dump/lb-scada-service-2020-05-12-1630/ > /data/db/dump/mongorestore.log 2>&1"
Создание резервных копий закрытого периода в биллинге
$ nohup agis-mongo-dump-period-close.sh &
nohup – UNIX-утилита, запускающая указанную команду с игнорированием сигналов потери связи (SIGHUP).
Таким образом, команда будет продолжать выполняться в фоновом режиме и после того, как пользователь выйдет из системы.
Запустили команду – вышли из ssh, пошли пить чай!
Скрипт
agis-mongo-dump-period-close.sh
Тут есть два параметра
BACKUPDIR=”/data/backup/dumps_period_close” – папка, куда будет сохранен архив mongodump
BACKUPCONT=”agis-mongo-db-bil” – название контейнера базы данных mongo
В папке $BACKUPDIR будет создан log file содержащий историю выполнения mongodump
Пример:
agis-mongo-db-bil-2021-01-23_05-36.arch-dump – Сам архив
agis-mongo-db-bil-2021-01-23_05-36.log – log файл
$ cat agis-mongo-dump-period-close.sh
#!/bin/bash
# agis-mongo-dump-period-close.sh
# Thi script is written to backup mongo billing container with log file
# 30 Dec 2020 15:41:23 PM +06
# Author Kazdayev Nurlan
#Settings
BACKUPDIR="/data/backup/dumps_period_close" # name of the directory where backup have to save
BACKUPCONT="agis-mongo-db-bil"
# ----------------------------------------------------------------------------------------------
TIMESTAMP=$(date +"%Y-%m-%d_%H-%M")
LOGFILE=$BACKUPDIR/$BACKUPCONT-$TIMESTAMP.log
echo $(date +"%Y-%m-%d %H:%M:%S") "Start mongodump $BACKUPCONT --gzip --archive" > $LOGFILE
/usr/bin/docker exec $BACKUPCONT sh -c "mongodump --gzip --archive" > $BACKUPDIR/$BACKUPCONT-$TIMESTAMP.arch-dump 2>>$LOGFILE
if [ $? = 0 ]; then
echo $(date +"%Y-%m-%d %H:%M:%S") "Резервная копия $BACKUPCONT сделана" >> $LOGFILE
else
echo $(date +"%Y-%m-%d %H:%M:%S") "Ошибка при создании $BACKUPCONT резервной копии" >> $LOGFILE
fi
echo $(date +"%Y-%m-%d %H:%M:%S") " Finish mongodump $BACKUPCONT --gzip --archive" >> $LOGFILE
Дополнительно
Создать копию отдельной коллекции
mongodump --gzip --archive=fs.chunks.gz --db=zander --collection=fs.chunks
mongodump --gzip --archive=fs.files.gz --db=zander --collection=fs.files
mongorestore --gzip --archive=fs.chunks.gz --nsFrom='zander.*' --nsTo='zander.*'
mongorestore --gzip --archive=fs.files.gz --nsFrom='zander.*' --nsTo='zander.*'
db['client-facility-dump'].deleteMany({ "meta.period" : { $lt: 202202} })
mongodump --gzip --archive=client-facility-dump.gz --db=agisbil --collection=client-facility-dump
mongorestore --gzip --archive=client-facility-dump.gz --nsFrom='agisbil.*' --nsTo='agisbil.*'
root@8d6a2a16260e:/# cd /data/db/dump/ mongodump --gzip --archive --db=zander --collection=devicePassports > devicePassports.gz mongodump --gzip --archive=fs.chunks.gz --db=zander --collection=fs.chunks mongodump --gzip --archive=fs.files.gz --db=zander --collection=fs.files
Импортировать коллекции zander.*, которые были в БД zander из архивного файла mongodump.gz в новую базу scada
mongorestore --gzip --archive --nsFrom='zander.*' --nsTo='scada.*' < mongodump.gz
mongorestore --gzip --archive=mongodump.gz --nsFrom='zander.*' --nsTo='scada.*'
Импортировать все коллекции из архивного файла mongodump.gz в новую базу scada
mongorestore --gzip --archive=mongodump.gz --nsFrom='*' --nsTo='newscada.*'
Копировать из БД scada коллекцию rolles в БД scada коллекцию roles2
mongodump --archive --db=scada --collection=roles | mongorestore --archive --nsFrom=scada.roles --nsTo=scada.roles2
mongodump --archive --db=zander --collection=objectValues201 | mongorestore --archive --nsFrom=zander.objectValues201 --nsTo=zander.['objectValues201-3']
Копировать из БД agisbill коллекцию 000 в БД scada коллекцию 000-new-copy
I have no name!@47740762dd91:/data/db$ mongodump --archive --db=agisbil --collection=000 | mongorestore --archive --nsFrom=agisbil.000 --nsTo=agisbil.000-new-copy
2022-02-17T06:54:27.380+0000 writing agisbil.000 to archive on stdout
2022-02-17T06:54:27.384+0000 preparing collections to restore from
2022-02-17T06:54:27.388+0000 done dumping agisbil.000 (5 documents)
2022-02-17T06:54:27.407+0000 reading metadata for agisbil.000-new-copy from archive on stdin
2022-02-17T06:54:27.435+0000 restoring agisbil.000-new-copy from archive on stdin
2022-02-17T06:54:27.447+0000 finished restoring agisbil.000-new-copy (5 documents, 0 failures)
2022-02-17T06:54:27.448+0000 restoring indexes for collection agisbil.000-new-copy from metadata
2022-02-17T06:54:27.448+0000 index: &idx.IndexDocument{Options:primitive.M{"name":"meta.period_1", "v":2}, Key:primitive.D{primitive.E{Key:"meta.period", Value:1}}, PartialFilterExpression:primitive.D(nil)}
2022-02-17T06:54:27.477+0000 5 document(s) restored successfully. 0 document(s) failed to restore.
Восстановить из dump.gz коллекцию roles в БД scada4 коллекцию roles9
mongorestore --gzip --archive=dump.gz --nsInclude=zander.roles --nsFrom=zander.roles --nsTo=scada4.roles9
Копировать из БД scada коллекцию rolles в БД newscada коллекцию roles
mongodump --archive --db=scada --collection=roles | mongorestore --archive --nsFrom=scada.roles --nsTo=newscada.roles
Создать копии всех коллекций, кроме перечисленных
mongodump --gzip --archive=mongodumpZander.gz --db=zander --excludeCollection=values201 --excludeCollection=objectValues201 --excludeCollection=message201 --excludeCollection=logg201 --excludeCollection=fs.chunks --excludeCollection=odataOpuConsumptionReading --excludeCollection=values --excludeCollection=odataByHoursZones2 --excludeCollection=opuReadings --excludeCollection=opuConsumptionHour --excludeCollection=odataByHoursFlowRate2 --excludeCollection=odataByHoursFlowRate1 --excludeCollection=odataByHoursZones1 --excludeCollection=hourBytes201 --excludeCollection=message --excludeCollection=odataByHoursPressure --excludeCollection=objectValuesCount201 --excludeCollection=odataByHoursZonesSum2 --excludeCollection=odataByHoursZonesSum1 --excludeCollection=logg401 --excludeCollection=odataByHours --excludeCollection=odataByHoursZones --excludeCollection=hourBytes401 --excludeCollection=odataByHoursZoneTest --excludeCollection=opuConsumptionMonth --excludeCollection=opuConsumption
Из операционной системы, т.е. вне контейнера файлы доступны
$ ls -l /data/agis/db/agis-mongo-db/db/dump
total 8421624
-rw-r--r-- 1 root root 10529621 Nov 7 03:05 mongodump.gz
-rw-r--r-- 1 root root 6197064 Nov 6 23:16 db_dump.gz
-rw-r--r-- 1 root root 4740821206 Nov 7 03:32 fs.chunks.gz
-rw-r--r-- 1 root root 420995 Nov 7 03:29 fs.files.gz
-rw-r--r-- 1 root root 10526569 Nov 7 03:10 mongodumpZander.gz
-rw-r--r-- 1 root root 6197064 Nov 7 01:52 test.gz