sql >> Database >  >> NoSQL >> MongoDB

Maak een back-up van een MongoDB-database met mongodump

Er zijn verschillende manieren om een ​​back-up te maken van een database in MongoDB. Een snelle manier om een ​​back-up van een database te maken, is door de mongodump . te gebruiken gereedschap.

mongodump leest gegevens uit een MongoDB-database en maakt high-fidelity BSON-bestanden die de mongorestore hulpprogramma kan gebruiken om een ​​MongoDB-database te herstellen.

Met mongodump , kunt u een back-up maken van een verzameling, een database of alle databases.

Controleer op MongoDB Database Tools

mongodump maakt deel uit van het MongoDB Database Tools-pakket. De MongoDB Database Tools zijn een reeks opdrachtregelhulpprogramma's voor het werken met MongoDB.

Je hebt misschien wel of niet de MongoDB Database Tools/mongodump geïnstalleerd. Probeer het volgende commando uit te voeren in uw Terminal of Command Prompt om te controleren:

mongodump --version

Als je het niet hebt, kun je de installatie-instructies op de MongoDB-website gebruiken om het op je systeem te installeren.

Waar moeten de opdrachten worden uitgevoerd?

U moet mongodump . uitvoeren opdrachten vanaf de opdrachtregel van uw systeem (bijvoorbeeld een nieuw Terminal- of opdrachtpromptvenster).

Voer ze niet uit vanuit de mongo schelp.

Back-up van alle databases

Gebruik de mongodump om een ​​back-up te maken van alle databases en verzamelingen in de lokale instantie die op de standaardpoort 27017 wordt uitgevoerd. commando zonder enige argumenten.

mongodump

Het uitvoeren van de bovenstaande code dumpt alle databases naar een map met de naam dump/ .

Merk op dat het de local . uitsluit en config databases.

Merk ook op dat mongodump legt alleen de documenten in de database vast. Wanneer u een herstel uitvoert, mongorestore of mongod moet de indexen opnieuw opbouwen na het herstellen van gegevens.

Zo zien de bestanden eruit in de dump/ map.

tree dump

Resultaat:

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

Die bestanden zijn duidelijk specifiek voor mijn MongoDB-installatie, die testdatabases bevat. In mijn geval werden 3 databases gedumpt:PetHotel , admin , en krankykranes .

Back-up naar een specifieke locatie

U kunt --out . gebruiken of -o om een ​​locatie op te geven om de bestanden voor de gedumpte databases te plaatsen.

Voorbeeld:

mongodump --out=data/backups/

Of:

mongodump -o=data/backups/

In dit geval wordt elke databasemap rechtstreeks uitgevoerd naar de data/backups/ map (d.w.z. er is geen /dump/ map).

Back-up van een specifieke database

U kunt de --db . gebruiken parameter om een ​​database op te geven waarvan u een back-up wilt maken.

mongodump --db=krankykranes

Dit dumpt de krankykranes database naar de standaard dump/ map.

Back-up van een specifieke verzameling

U kunt --collection . gebruiken of -c om een ​​verzameling op te geven waarvan u een back-up wilt maken.

Voorbeeld:

mongodump --db=krankykranes --collection=products

Of:

mongodump --db=krankykranes -c=products

Dit dumpt de products verzameling naar de dump/krankykranes map.

Exclusief collecties

U kunt ook de --excludeCollection . gebruiken parameter om een ​​specifieke verzameling op te geven die moet worden uitgesloten van de back-up (d.w.z. niet opnemen in de back-up).

Voorbeeld:

mongodump --db=PetHotel --excludeCollection=employees

Dit dumpt alle collecties van het PetHotel database behalve de employees collectie.

Om meer dan één verzameling uit te sluiten, gebruikt u een aparte --excludeCollection parameter voor elke verzameling die u wilt uitsluiten.

Voorbeeld:

mongodump --db=PetHotel --excludeCollection=employees --excludeCollection=students

Dat is exclusief de employees en students verzamelingen van de back-up.

U kunt ook de --excludeCollectionsWithPrefix . gebruiken parameter om verzamelingen met een bepaald voorvoegsel uit te sluiten.

mongodump --db=PetHotel --excludeCollectionsWithPrefix=p

Dat dumpt alle collecties behalve die die beginnen met de letter p .

De volgende sluit alle collecties uit die beginnen met pet .

mongodump --db=PetHotel --excludeCollectionsWithPrefix=pet

U kunt meerdere --excludeCollectionsWithPrefix . gebruiken argumenten om collecties met meerdere voorvoegsels uit te sluiten.

Voorbeeld:

mongodump --db=PetHotel --excludeCollectionsWithPrefix=p  --excludeCollectionsWithPrefix=s

Comprimeer de uitvoer

U kunt de --gzip . gebruiken parameter om de uitvoer te comprimeren.

mongodump --gzip --db=krankykranes

Dit comprimeert de individuele bestanden.

tree dump

Resultaat:

dump
└── krankykranes
    ├── employees.bson.gz
    ├── employees.metadata.json.gz
    ├── products.bson.gz
    └── products.metadata.json.gz

We kunnen zien dat alle bestanden de .gz . hebben extensie.

Bij uitvoer naar een archiefbestand of de standaard uitstroom, wordt de --gzip optie comprimeert het archiefbestand of de gegevensuitvoer naar de stream.

Converteer weergaven naar collecties

U kunt de --viewsAsCollections . gebruiken parameter om alleen-lezen weergaven als verzamelingen te exporteren.

mongodump --db=PetHotel --viewsAsCollections

Wanneer u een weergave als verzameling exporteert, mongodump produceert een BSON-bestand met de documenten in de weergave. Als u mongorestore . gebruikt om het geproduceerde BSON-bestand te herstellen, wordt de weergave hersteld als een verzameling.

Zonder dit argument te gebruiken, mongodump exporteert de metadata van elke weergave. Als u het metadatabestand van een weergave opneemt in een mongorestore bewerking, wordt de weergave opnieuw gemaakt.

--viewsAsCollections gebruiken laat ook alle standaardcollecties weg. Daarom, wanneer ik de bovenstaande code uitvoer, mijn dump/ mappenstructuur ziet er als volgt uit:

tree dump

Resultaat:

dump
└── PetHotel
    ├── pettypes.bson
    └── pettypes.metadata.json

In mijn PetHotel database, ik heb een weergave genaamd pettypes . Wanneer ik dit als een weergave exporteer, worden alleen de metadata geëxporteerd. Maar als ik het naar een verzameling converteer, wordt een pettypes.bson bestand wordt gemaakt dat er niet zou zijn als ik de weergave als een weergave had geëxporteerd.

Dit is wat er gebeurt als ik die weergave exporteer zonder deze naar een verzameling te converteren.

mongodump --db=PetHotel --collection=pettypes

Voer vervolgens het tree-commando uit om de mappenstructuur te krijgen.

tree dump

Resultaat:

dump
└── PetHotel
    └── pettypes.metadata.json

We kunnen dus zien dat alleen de metagegevens voor de weergave worden gedumpt.

Stille modus

U kunt de --quiet . gebruiken parameter om de uitvoer in uw Terminal- of opdrachtpromptvenster te beperken.

mongodump --quiet

Zonder dit te gebruiken, ziet u waarschijnlijk een grote lijst met weergaven, verzamelingen, enz. waarvan een back-up is gemaakt.

Uitgebreide modus

Aan de andere kant kun je de --verbose . gebruiken of -v parameters om te verhogen de uitvoer in uw Terminal- of opdrachtpromptvenster.

mongodump --verbose

U kunt de breedsprakigheid vergroten door de -v . te herhalen meerdere keren vormen.

Voorbeeld:

mongodump -vvvv

Door dat op mijn systeem te gebruiken, werd de breedsprakigheid aanzienlijk vergroot.

Resultaten van back-upquery

U kunt de --query . gebruiken of -q parameters om het resultaat van een zoekopdracht te dumpen.

Voorbeeld:

mongodump --db=PetHotel --collection=pets --query='{ "type": "Dog" }'

Wanneer u dit doet, omringt u de query met enkele aanhalingstekens. U kunt dubbele aanhalingstekens gebruiken voor de velden.

Archief en standaarduitvoer

U kunt het --archive . gebruiken of parameter om de uitvoer naar een gespecificeerd archiefbestand te schrijven of, als het archiefbestand niet gespecificeerd is, naar de standaarduitvoer (stdout ) stream zodat u naar een ander proces kunt doorsluizen.

Voorbeeld van uitvoer naar een archiefbestand:

mongodump --archive=PetHotel.20201230.archive --db=PetHotel

In het volgende voorbeeld schrijf ik naar de standaard uitvoerstroom en pijp ik vervolgens naar mongorestore :

mongodump --archive --db=PetHotel --collection=pets --query='{ "type": "Dog" }' | mongorestore --archive  --nsFrom='PetHotel.pets' --nsTo='PetHotel.dogs'

Dat resulteert in een nieuwe collectie genaamd dogs verschijnen in het PetHotel database (en de collectie bevat alleen documenten met een type veld met een waarde van dog ).

Toegangscontrole

De vorige voorbeelden zijn gedaan op de lokale computer met behulp van de standaardpoort. Dit betekende dat we mongodump . konden uitvoeren zonder dingen op te geven zoals --host , --port , --username , enz.

Hier is een voorbeeld dat deze parameters gebruikt om te authenticeren als homer :

mongodump --host=myhost.example.com --port=37017 --username=homer --authenticationDatabase=admin --out=/backups/mongodump-2020-12-30

We hadden ook de --password . kunnen gebruiken parameter, maar dat deden we niet. Als u --user pass doorgeeft maar niet --password , wordt u om het wachtwoord gevraagd.

Meer informatie over mongodump

De mongodump hulpprogramma accepteert tal van andere nuttige parameters, en er zijn ook verschillende factoren waarmee u rekening moet houden wanneer u het gebruikt als onderdeel van een back-up- en herstelstrategie.

Zie de mongodump documentatie op de MongoDB-website voor meer info.

Andere opties

mongodump en mongorestore zijn eenvoudige en efficiënte tools voor het maken van back-ups en het herstellen van kleine MongoDB-implementaties, maar zijn niet ideaal voor het vastleggen van back-ups van grotere systemen.

Zie MongoDB-back-upmethoden op de MongoDB-website voor andere methoden voor het maken van back-ups van uw MongoDB-databases.


  1. Spring-sessie instellen op redis-server

  2. Wanneer naar Redis? Wanneer naar MongoDB?

  3. MongoDB-object geserialiseerd als JSON

  4. Geneste array in mangoest vullen