sql >> Database teknologi >  >> NoSQL >> MongoDB

Sikkerhedskopier en MongoDB-database ved hjælp af mongodump

Der er flere måder at sikkerhedskopiere en database på i MongoDB. En hurtig måde at sikkerhedskopiere en database på er at bruge mongodump værktøj.

mongodump læser data fra en MongoDB-database og opretter high fidelity BSON-filer som mongorestore utility kan bruge til at gendanne en MongoDB-database.

Med mongodump , kan du sikkerhedskopiere en samling, en database eller alle databaser.

Søg efter MongoDB-databaseværktøjer

mongodump er en del af MongoDB Database Tools-pakken. MongoDB-databaseværktøjerne er en række kommandolinjeværktøjer til at arbejde med MongoDB.

Du har måske eller måske ikke MongoDB Database Tools/mongodump installeret. Prøv at køre følgende kommando i din terminal eller kommandoprompt for at kontrollere:

mongodump --version 

Hvis du ikke har det, kan du bruge installationsinstruktionerne på MongoDB-webstedet for at installere det på dit system.

Hvor skal kommandoerne køres?

Du skal køre mongodump kommandoer fra dit systems kommandolinje (f.eks. et nyt terminal- eller kommandopromptvindue).

Kør dem ikke fra mongo skal.

Sikkerhedskopier alle databaser

For at sikkerhedskopiere alle databaser og samlinger i den lokale instans, der kører på standardporten 27017, skal du bruge mongodump kommando uden nogen argumenter.

mongodump 

Kørsel af ovenstående kode dumper alle databaser til en mappe kaldet dump/ .

Bemærk, at den udelukker den lokale og config databaser.

Bemærk også, at mongodump kun fanger dokumenterne i databasen. Når du laver en gendannelse, mongorestore eller mongod skal genopbygge indekserne efter gendannelse af data.

Sådan ser filerne ud i dump/ mappe.

trædump 

Resultat:

dump├── PetHotel│ ├── ansatte.bson│ ├── ansatte.metadata.json│ ├── ejere.bson│ ├── ejere.metadata.json───søn│ ─ pets.metadata.json│ ├── pettypes.metadata.json│ ├── players.bson│ ├── players.metadata.json│ ├── scores.bson│s. ─ students.bson│ └── students.metadata.json├── admin│ ├── system.users.bson│ ├── system.users.metadata.json│ ├──system ├──system. system.version.metadata.json- 

Disse filer er tydeligvis specifikke for min MongoDB-installation, som indeholder testdatabaser. I mit tilfælde blev 3 databaser dumpet:PetHotel , admin , og krankykranes .

Sikkerhedskopiér til en bestemt placering

Du kan bruge --out eller -o for at angive en placering for at placere filerne til de dumpede databaser.

Eksempel:

mongodump --out=data/backups/ 

Eller:

mongodump -o=data/backups/ 

I dette tilfælde udlæses hver databasemappe direkte i data/backups/ mappe (dvs. der er ingen /dump/ mappe).

Sikkerhedskopier en specifik database

Du kan bruge --db parameter for at angive en database, der skal sikkerhedskopieres.

mongodump --db=krankykranes 

Dette dumper krankykranes database til standard dump/ mappe.

Sikkerhedskopiér en specifik samling

Du kan bruge --collection eller -c for at angive en samling, der skal sikkerhedskopieres.

Eksempel:

mongodump --db=krankykranes --collection=produkter 

Eller:

mongodump --db=krankykranes -c=produkter 

Dette dumper produkterne samling til dump/krankykranes mappe.

Ekskluderer samlinger

Du kan også bruge --excludeCollection parameter for at angive en specifik samling, der skal udelukkes fra sikkerhedskopien (dvs. ikke inkludere i sikkerhedskopien).

Eksempel:

mongodump --db=PetHotel --excludeCollection=medarbejdere 

Dette dumper alle samlinger fra PetHotel database undtagen medarbejderne samling.

For at ekskludere mere end én samling, brug en separat --excludeCollection parameter for hver samling, du vil ekskludere.

Eksempel:

mongodump --db=PetHotel --excludeCollection=medarbejdere --excludeCollection=studerende 

Det ekskluderer medarbejderne og elever samlinger fra sikkerhedskopien.

Du kan også bruge --excludeCollectionsWithPrefix parameter for at ekskludere samlinger med et givet præfiks.

mongodump --db=PetHotel --excludeCollectionsWithPrefix=p 

Det dumper alle samlinger undtagen dem, der starter med bogstavet p .

Den følgende udelukker alle samlinger, der starter med kæledyr .

mongodump --db=PetHotel --excludeCollectionsWithPrefix=kæledyr 

Du kan bruge flere --excludeCollectionsWithPrefix argumenter for at ekskludere samlinger med flere præfikser.

Eksempel:

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

Komprimer outputtet

Du kan bruge --gzip parameter for at komprimere outputtet.

mongodump --gzip --db=krankykranes 

Dette komprimerer de enkelte filer.

trædump 

Resultat:

dump└── krankykranes ├── employee.bson.gz ├── employee.metadata.json.gz ├── products.bson.gz └── products.metadata.json.gzcode

>

Vi kan se, at alle filer har .gz udvidelse.

Når du udskriver til en arkivfil eller standard ud-stream, er --gzip option komprimerer arkivfilen eller dataoutputtet til streamen.

Konverter visninger til samlinger

Du kan bruge --viewsAsCollections parameter for at eksportere skrivebeskyttede visninger som samlinger.

mongodump --db=PetHotel --viewsAsCollections 

Når du eksporterer en visning som en samling, mongodump producerer en BSON-fil, der indeholder dokumenterne i visningen. Hvis du bruger mongorestore for at gendanne den producerede BSON-fil, vil visningen blive gendannet som en samling.

Uden at bruge dette argument, mongodump eksporterer hver visnings metadata. Hvis du inkluderer en visnings metadatafil i en mongorestore operation, genskabes visningen.

Brug af --viewsAsCollections udelader også alle standardkollektioner. Derfor, når jeg kører ovenstående kode, vil min dump/ mappestrukturen ser sådan ud:

trædump 

Resultat:

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

I mit PetHotel database, jeg har en visning kaldet kæledyrstyper . Når jeg eksporterer dette som en visning, eksporteres kun metadataene. Men når jeg konverterer den til en samling, en pettypes.bson fil oprettes, som ikke ville være der, hvis jeg havde eksporteret visningen som en visning.

Her er, hvad der sker, hvis jeg eksporterer den visning uden at konvertere den til en samling.

mongodump --db=PetHotel --collection=pettypes 

Kør derefter trækommandoen for at få mappestrukturen.

trædump 

Resultat:

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

Så vi kan se, at kun metadataene for visningen er dumpet.

Støjsvag tilstand

Du kan bruge --quiet parameter for at begrænse output i dit terminal- eller kommandopromptvindue.

mongodump --quiet 

Uden at bruge dette, vil du sandsynligvis se en stor liste over visninger, samlinger osv., der er sikkerhedskopieret.

Verbose Mode

På bagsiden kan du bruge --verbose eller -v parametre for at øge outputtet i dit terminal- eller kommandopromptvindue.

mongodump --verbose 

Du kan øge omfanget ved at gentage -v form flere gange.

Eksempel:

mongodump -vvvv 

At køre det på mit system øgede omfanget markant.

Resultater af backupforespørgsler

Du kan bruge --forespørgslen eller -q parametre for at dumpe resultatet af en forespørgsel.

Eksempel:

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

Når du gør dette, skal du omgive forespørgslen med enkelte anførselstegn. Du kan bruge dobbelte anførselstegn for felterne.

Arkiv og standardoutput

Du kan bruge --arkivet eller parameter for at skrive outputtet til en specificeret arkivfil eller, hvis arkivfilen er uspecificeret, til standardoutputtet (stdout ) stream, så du kan overføre til en anden proces.

Eksempel på output til en arkivfil:

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

I det næste eksempel skriver jeg til standardoutputstrømmen og sender derefter til mongorestore :

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

Det resulterer i en ny samling kaldet hunde vises i PetHotel database (og samlingen indeholder kun dokumenter, der har en type felt med værdien dog ).

Adgangskontrol

De tidligere eksempler blev udført på den lokale maskine ved hjælp af standardporten. Dette betød, at vi var i stand til at køre mongodump uden at specificere ting som --host , --port , --brugernavn osv.

Her er et eksempel, der bruger disse parametre til at godkende som homer :

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

Vi kunne også have brugt --password parameter, men det gjorde vi ikke. Hvis du sender --bruger men ikke --password , bliver du bedt om adgangskoden.

Flere oplysninger om mongodump

mongodump hjælpeprogrammet accepterer masser af andre nyttige parametre, og der er også forskellige faktorer at overveje, når du bruger det som en del af en backup- og gendannelsesstrategi.

Se mongodump dokumentation på MongoDB-webstedet for mere info.

Andre muligheder

mongodump og mongorestore er enkle og effektive værktøjer til sikkerhedskopiering og gendannelse af små MongoDB-implementeringer, men er ikke ideelle til at tage backup af større systemer.

Se MongoDB Backup Methods på MongoDB-webstedet for andre metoder til sikkerhedskopiering af dine MongoDB-databaser.


  1. Hvorfor har vi brug for en 'arbiter' i MongoDB-replikering?

  2. Indstil Mongo Timeout i Spring Boot

  3. Hvordan ændrer man rækkefølgen af ​​array med MongoDB?

  4. BsonSerializationException ved serialisering af en ordbog<DateTime,T> til BSON