Има няколко начина за архивиране на база данни в MongoDB. Един бърз начин за архивиране на база данни е да използвате mongodump
инструмент.
mongodump
чете данни от база данни MongoDB и създава BSON файлове с висока точност, които mongorestore
помощната програма може да използва за възстановяване на база данни MongoDB.
С mongodump
, можете да архивирате колекция, база данни или всички бази данни.
Проверете за инструменти за база данни на MongoDB
mongodump
е част от пакета MongoDB Database Tools. Инструментите за база данни на MongoDB са набор от помощни програми от командния ред за работа с MongoDB.
Може или не може да имате MongoDB Database Tools/mongodump
инсталирани. Опитайте да изпълните следната команда във вашия терминал или команден ред, за да проверите:
mongodump --version
Ако го нямате, можете да използвате инструкциите за инсталиране на уебсайта на MongoDB, за да го инсталирате на вашата система.
Къде да изпълнявам командите?
Трябва да стартирате mongodump
команди от командния ред на вашата система (например нов прозорец на терминал или команден ред).
Не ги стартирайте от mongo
черупка.
Архивирайте всички бази данни
За да архивирате всички бази данни и колекции в локалния екземпляр, работещ на порта по подразбиране 27017, използвайте mongodump
команда без никакви аргументи.
mongodump
Изпълнението на горния код изхвърля всички бази данни в папка, наречена dump/
.
Имайте предвид, че изключва local
и config
бази данни.
Също така имайте предвид, че mongodump
улавя само документите в базата данни. Когато правите възстановяване, mongorestore
или mongod
трябва да изгради отново индексите след възстановяване на данните.
Ето как изглеждат файловете в dump/
папка.
tree dump
Резултат:
dump ├── PetHotel │ ├── employees.bson │ ├── employees.metadata.json │ ├── owners.bson │ ├── owners.metadata.json │ ├── pets.bson │ ├── pets.metadata.json │ ├── pettypes.metadata.json │ ├── players.bson │ ├── players.metadata.json │ ├── scores.bson │ ├── scores.metadata.json │ ├── students.bson │ └── students.metadata.json ├── admin │ ├── system.users.bson │ ├── system.users.metadata.json │ ├── system.version.bson │ └── system.version.metadata.json └── krankykranes ├── employees.bson ├── employees.metadata.json ├── products.bson └── products.metadata.json
Тези файлове очевидно са специфични за моята инсталация на MongoDB, която съдържа тестови бази данни. В моя случай бяха изхвърлени 3 бази данни:PetHotel
, admin
и krankykranes
.
Резервно копие на конкретно местоположение
Можете да използвате --out
или -o
за да посочите местоположение за поставяне на файловете за изхвърлените бази данни.
Пример:
mongodump --out=data/backups/
Или:
mongodump -o=data/backups/
В този случай всяка папка с база данни се извежда директно в data/backups/
папка (т.е. няма /dump/
папка).
Архивиране на конкретна база данни
Можете да използвате --db
параметър, за да посочите база данни за архивиране.
mongodump --db=krankykranes
Това изхвърля krankykranes
база данни към dump/
по подразбиране папка.
Създайте резервно копие на конкретна колекция
Можете да използвате --collection
или -c
за да посочите колекция за архивиране.
Пример:
mongodump --db=krankykranes --collection=products
Или:
mongodump --db=krankykranes -c=products
Това изхвърля products
събиране в dump/krankykranes
папка.
С изключение на колекции
Можете също да използвате --excludeCollection
параметър, за да посочите конкретна колекция, която да изключите от архива (т.е. да не включите в архива).
Пример:
mongodump --db=PetHotel --excludeCollection=employees
Това изхвърля всички колекции от PetHotel
база данни с изключение на employees
колекция.
За да изключите повече от една колекция, използвайте отделен --excludeCollection
параметър за всяка колекция, която искате да изключите.
Пример:
mongodump --db=PetHotel --excludeCollection=employees --excludeCollection=students
Това изключва employees
и students
колекции от архива.
Можете също да използвате --excludeCollectionsWithPrefix
параметър за изключване на колекции с даден префикс.
mongodump --db=PetHotel --excludeCollectionsWithPrefix=p
Това изхвърля всички колекции, освен тези, които започват с буквата p
.
Следното изключва всички колекции, които започват с pet
.
mongodump --db=PetHotel --excludeCollectionsWithPrefix=pet
Можете да използвате няколко --excludeCollectionsWithPrefix
аргументи за изключване на колекции с множество префикси.
Пример:
mongodump --db=PetHotel --excludeCollectionsWithPrefix=p --excludeCollectionsWithPrefix=s
Компресирайте изхода
Можете да използвате --gzip
параметър за компресиране на изхода.
mongodump --gzip --db=krankykranes
Това компресира отделните файлове.
tree dump
Резултат:
dump
└── krankykranes
├── employees.bson.gz
├── employees.metadata.json.gz
├── products.bson.gz
└── products.metadata.json.gz
Можем да видим, че всички файлове имат .gz
разширение.
Когато извеждате в архивен файл или стандартния изходящ поток, --gzip
опцията компресира архивния файл или изведените данни в потока.
Преобразуване на изгледи в колекции
Можете да използвате --viewsAsCollections
параметър за експортиране на изгледи само за четене като колекции.
mongodump --db=PetHotel --viewsAsCollections
Когато експортирате изглед като колекция, mongodump
създава BSON файл, съдържащ документите в изгледа. Ако използвате mongorestore
за да възстановите произведения BSON файл, изгледът ще бъде възстановен като колекция.
Без да използвате този аргумент, mongodump
експортира метаданните на всеки изглед. Ако включите файла с метаданни на изглед в mongorestore
операция, изгледът се пресъздава.
Използване на --viewsAsCollections
също така пропуска всички стандартни колекции. Следователно, когато стартирам горния код, моят dump/
структурата на папките изглежда така:
tree dump
Резултат:
dump
└── PetHotel
├── pettypes.bson
└── pettypes.metadata.json
В моя PetHotel
база данни, имам изглед, наречен pettypes
. Когато експортирам това като изглед, се експортират само метаданните. Но когато го преобразувам в колекция, pettypes.bson
се създава файл, който не би бил там, ако бях експортирал изгледа като изглед.
Ето какво се случва, ако експортирам този изглед, без да го преобразувам в колекция.
mongodump --db=PetHotel --collection=pettypes
След това изпълнете командата дърво, за да получите структурата на папките.
tree dump
Резултат:
dump └── PetHotel └── pettypes.metadata.json
Така можем да видим, че само метаданните за изгледа са изхвърлени.
Тих режим
Можете да използвате --quiet
параметър за ограничаване на изхода в прозореца на терминала или командния ред.
mongodump --quiet
Без да използвате това, вероятно ще видите голям списък с изгледи, колекции и т.н., които са архивирани.
Подробен режим
От друга страна, можете да използвате --verbose
или -v
параметри за увеличаване изхода във вашия терминал или прозорец на командния ред.
mongodump --verbose
Можете да увеличите многословността, като повторите -v
форма няколко пъти.
Пример:
mongodump -vvvv
Изпълнението на това в моята система значително увеличи многословието.
Резервни резултати от заявка
Можете да използвате --query
или -q
параметри за изхвърляне на резултата от заявка.
Пример:
mongodump --db=PetHotel --collection=pets --query='{ "type": "Dog" }'
Когато правите това, оградете заявката с единични кавички. Можете да използвате двойни кавички за полетата.
Архиви и стандартен изход
Можете да използвате --archive
или параметър за записване на изхода в определен архивен файл или, ако архивният файл не е посочен, в стандартния изход (stdout
) поток, за да можете да пренасочите към друг процес.
Пример за извеждане в архивен файл:
mongodump --archive=PetHotel.20201230.archive --db=PetHotel
В следващия пример пиша към стандартния изходен поток, след което изпращам към mongorestore
:
mongodump --archive --db=PetHotel --collection=pets --query='{ "type": "Dog" }' | mongorestore --archive --nsFrom='PetHotel.pets' --nsTo='PetHotel.dogs'
Това води до нова колекция, наречена dogs
се появява в PetHotel
база данни (и колекцията съдържа само документи, които имат type
поле със стойност dog
).
Контрол на достъпа
Предишните примери бяха направени на локалната машина с помощта на порта по подразбиране. Това означаваше, че успяхме да изпълним mongodump
без да се посочват неща като --host
, --port
, --username
и др.
Ето пример, който използва тези параметри за удостоверяване като homer
:
mongodump --host=myhost.example.com --port=37017 --username=homer --authenticationDatabase=admin --out=/backups/mongodump-2020-12-30
Можехме също да използваме --password
параметър, но ние не го направихме. Ако подадете --user
но не и --password
, ще бъдете подканени за паролата.
Повече информация за mongodump
mongodump
Помощната програма приема много други полезни параметри и има различни фактори, които трябва да се вземат предвид, когато се използва като част от стратегия за архивиране и възстановяване.
Вижте mongodump
документация на уебсайта на MongoDB за повече информация.
Други опции
mongodump
и mongorestore
са прости и ефективни инструменти за архивиране и възстановяване на малки разгръщания на MongoDB, но не са идеални за заснемане на резервни копия на по-големи системи.
Вижте Методи за архивиране на MongoDB на уебсайта на MongoDB за други методи за архивиране на вашите бази данни MongoDB.