Existuje několik způsobů, jak zálohovat databázi v MongoDB. Jedním rychlým způsobem zálohování databáze je použití mongodump
nástroj.
mongodump
čte data z databáze MongoDB a vytváří vysoce věrné soubory BSON, které mongorestore
utility může použít k obnovení databáze MongoDB.
Pomocí mongodump
, můžete zálohovat kolekci, databázi nebo všechny databáze.
Vyhledejte databázové nástroje MongoDB
mongodump
je součástí balíčku databázových nástrojů MongoDB. Databázové nástroje MongoDB jsou sada nástrojů příkazového řádku pro práci s MongoDB.
Můžete nebo nemusíte mít databázové nástroje MongoDB/mongodump
nainstalováno. Zkuste spustit následující příkaz v terminálu nebo příkazovém řádku a zkontrolujte:
mongodump --version
Pokud jej nemáte, můžete jej nainstalovat do svého systému pomocí pokynů k instalaci na webu MongoDB.
Kde spustit příkazy?
Musíte spustit mongodump
příkazy z příkazového řádku vašeho systému (např. nový terminál nebo okno příkazového řádku).
Nespouštějte je z mongo
skořápka.
Zálohovat všechny databáze
Chcete-li zálohovat všechny databáze a kolekce v místní instanci běžící na výchozím portu 27017, použijte mongodump
příkaz bez jakýchkoli argumentů.
mongodump
Spuštění výše uvedeného kódu vypíše všechny databáze do složky s názvem dump/
.
Všimněte si, že nezahrnuje local
a config
databáze.
Všimněte si také, že mongodump
pouze zachycuje dokumenty v databázi. Když provedete obnovu, mongorestore
nebo mongod
musí po obnovení dat znovu sestavit indexy.
Takto vypadají soubory v dump/
složka.
tree dump
Výsledek:
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
Tyto soubory jsou samozřejmě specifické pro moji instalaci MongoDB, která obsahuje testovací databáze. V mém případě byly vypsány 3 databáze:PetHotel
, admin
a krankykranes
.
Zálohování na konkrétní místo
Můžete použít --out
nebo -o
k určení umístění pro umístění souborů pro výpis databáze.
Příklad:
mongodump --out=data/backups/
Nebo:
mongodump -o=data/backups/
V tomto případě je výstup každé složky databáze přímo do data/backups/
složka (tj. neexistuje žádný /dump/
složka).
Zálohujte konkrétní databázi
Můžete použít --db
parametr k určení databáze, která se má zálohovat.
mongodump --db=krankykranes
Toto vypíše krankykranes
databáze na výchozí dump/
složka.
Zálohování konkrétní sbírky
Můžete použít --collection
nebo -c
k určení kolekce k zálohování.
Příklad:
mongodump --db=krankykranes --collection=products
Nebo:
mongodump --db=krankykranes -c=products
Tím se vypíšou products
sběr do dump/krankykranes
složka.
Vyloučení sbírek
Můžete také použít --excludeCollection
parametr k určení konkrétní kolekce, která se má ze zálohy vyloučit (tj. nezahrnout do zálohy).
Příklad:
mongodump --db=PetHotel --excludeCollection=employees
Tím se vypíšou všechny sbírky z PetHotel
databáze kromě employees
kolekce.
Chcete-li vyloučit více než jednu sbírku, použijte samostatný --excludeCollection
parametr pro každou kolekci, kterou chcete vyloučit.
Příklad:
mongodump --db=PetHotel --excludeCollection=employees --excludeCollection=students
To nezahrnuje employees
a students
sbírky ze zálohy.
Můžete také použít --excludeCollectionsWithPrefix
parametr pro vyloučení kolekcí s danou předponou.
mongodump --db=PetHotel --excludeCollectionsWithPrefix=p
To vypíše všechny kolekce kromě těch, které začínají písmenem p
.
Následující vylučuje všechny kolekce, které začínají pet
.
mongodump --db=PetHotel --excludeCollectionsWithPrefix=pet
Můžete použít více --excludeCollectionsWithPrefix
argumenty pro vyloučení kolekcí s více předponami.
Příklad:
mongodump --db=PetHotel --excludeCollectionsWithPrefix=p --excludeCollectionsWithPrefix=s
Komprimujte výstup
Můžete použít --gzip
parametr pro kompresi výstupu.
mongodump --gzip --db=krankykranes
Tím se zkomprimují jednotlivé soubory.
tree dump
Výsledek:
dump
└── krankykranes
├── employees.bson.gz
├── employees.metadata.json.gz
├── products.bson.gz
└── products.metadata.json.gz
Vidíme, že všechny soubory mají .gz
rozšíření.
Při výstupu do archivního souboru nebo standardního výstupního proudu --gzip
komprimuje archivní soubor nebo výstup dat do streamu.
Převést zobrazení na sbírky
Můžete použít --viewsAsCollections
parametr pro export pohledů pouze pro čtení jako kolekce.
mongodump --db=PetHotel --viewsAsCollections
Když exportujete pohled jako kolekci, mongodump
vytvoří soubor BSON obsahující dokumenty v pohledu. Pokud používáte mongorestore
pro obnovení vytvořeného souboru BSON bude pohled obnoven jako kolekce.
Bez použití tohoto argumentu mongodump
exportuje metadata každého pohledu. Pokud zahrnete soubor metadat zobrazení do mongorestore
operace, pohled se znovu vytvoří.
Pomocí --viewsAsCollections
také vynechává všechny standardní kolekce. Proto, když spustím výše uvedený kód, můj dump/
struktura složek vypadá takto:
tree dump
Výsledek:
dump
└── PetHotel
├── pettypes.bson
└── pettypes.metadata.json
V mém PetHotel
databáze, mám pohled nazvaný pettypes
. Když to exportuji jako pohled, exportují se pouze metadata. Ale když to převedu na kolekci, pettypes.bson
je vytvořen soubor, který by tam nebyl, kdybych exportoval pohled jako pohled.
Co se stane, když exportuji toto zobrazení, aniž bych jej převedl na kolekci.
mongodump --db=PetHotel --collection=pettypes
Poté spusťte příkaz stromu, abyste získali strukturu složek.
tree dump
Výsledek:
dump └── PetHotel └── pettypes.metadata.json
Můžeme tedy vidět, že se vypisují pouze metadata pro pohled.
Tichý režim
Můžete použít --quiet
parametr pro omezení výstupu v okně terminálu nebo příkazového řádku.
mongodump --quiet
Bez použití tohoto pravděpodobně uvidíte velký seznam pohledů, sbírek atd., které jsou zálohovány.
Upovídaný režim
Na druhé straně můžete použít --verbose
nebo -v
parametry zvýšit výstup v okně terminálu nebo příkazového řádku.
mongodump --verbose
Výřečnost můžete zvýšit opakováním -v
tvořit vícekrát.
Příklad:
mongodump -vvvv
Spuštění tohoto na mém systému výrazně zvýšilo výřečnost.
Záložní výsledky dotazu
Můžete použít --query
nebo -q
parametry pro výpis výsledku dotazu.
Příklad:
mongodump --db=PetHotel --collection=pets --query='{ "type": "Dog" }'
Když to uděláte, vložte dotaz do jednoduchých uvozovek. Pro pole můžete použít dvojité uvozovky.
Archiv a standardní výstup
Můžete použít --archive
nebo parametr pro zápis výstupu do zadaného archivního souboru nebo, pokud archivní soubor není specifikován, do standardního výstupu (stdout
) streamovat, abyste mohli přejít na jiný proces.
Příklad výstupu do archivního souboru:
mongodump --archive=PetHotel.20201230.archive --db=PetHotel
V dalším příkladu zapisuji do standardního výstupního proudu a poté pomocí kanálu mongorestore
:
mongodump --archive --db=PetHotel --collection=pets --query='{ "type": "Dog" }' | mongorestore --archive --nsFrom='PetHotel.pets' --nsTo='PetHotel.dogs'
Výsledkem je nová kolekce s názvem dogs
objevující se v PetHotel
databáze (a kolekce obsahuje pouze dokumenty, které mají type
pole s hodnotou dog
).
Řízení přístupu
Předchozí příklady byly provedeny na místním počítači pomocí výchozího portu. To znamenalo, že jsme mohli spustit mongodump
bez určení věcí jako --host
, --port
, --username
, atd.
Zde je příklad, který používá tyto parametry k ověření jako homer
:
mongodump --host=myhost.example.com --port=37017 --username=homer --authenticationDatabase=admin --out=/backups/mongodump-2020-12-30
Mohli jsme také použít --password
parametr, ale neudělali jsme to. Pokud předáte --user
ale ne --password
, budete vyzváni k zadání hesla.
Další informace o mongodump
mongodump
obslužný program akceptuje spoustu dalších užitečných parametrů a při jeho používání jako součásti strategie zálohování a obnovy je třeba zvážit také různé faktory.
Viz mongodump
dokumentaci na webu MongoDB pro více informací.
Další možnosti
mongodump
a mongorestore
jsou jednoduché a efektivní nástroje pro zálohování a obnovu malých nasazení MongoDB, ale nejsou ideální pro zachycování záloh větších systémů.
Další metody zálohování databází MongoDB naleznete v části Metody zálohování MongoDB na webu MongoDB.