sql >> Databasteknik >  >> NoSQL >> MongoDB

Säkerhetskopiera en MongoDB-databas med mongodump

Det finns flera sätt att säkerhetskopiera en databas i MongoDB. Ett snabbt sätt att säkerhetskopiera en databas är att använda mongodump verktyg.

mongodump läser data från en MongoDB-databas och skapar high fidelity BSON-filer som mongorestore utility kan använda för att återställa en MongoDB-databas.

Med mongodump , kan du säkerhetskopiera en samling, en databas eller alla databaser.

Sök efter MongoDB Database Tools

mongodump är en del av MongoDB Database Tools-paketet. MongoDB Database Tools är en uppsättning kommandoradsverktyg för att arbeta med MongoDB.

Du har eller kanske inte har MongoDB Database Tools/mongodump installerat. Prova att köra följande kommando i din terminal eller kommandotolk för att kontrollera:

mongodump --version

Om du inte har det kan du använda installationsinstruktionerna på MongoDB-webbplatsen för att installera det på ditt system.

Var kör man kommandona?

Du måste köra mongodump kommandon från ditt systems kommandorad (t.ex. ett nytt terminal- eller kommandotolkfönster).

Kör dem inte från mongo skal.

Säkerhetskopiera alla databaser

För att säkerhetskopiera alla databaser och samlingar i den lokala instansen som körs på standardporten 27017, använd mongodump kommando utan några argument.

mongodump

Att köra ovanstående kod dumpar alla databaser till en mapp som heter dump/ .

Observera att den exkluderar local och config databaser.

Observera också att mongodump fångar endast dokumenten i databasen. När du gör en återställning, mongorestore eller mongod måste bygga om indexen efter att ha återställt data.

Så här ser filerna ut i dump/ mapp.

tree dump

Resultat:

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

Dessa filer är uppenbarligen specifika för min MongoDB-installation, som innehåller testdatabaser. I mitt fall dumpades 3 databaser:PetHotel , admin , och krankykranes .

Säkerhetskopiera till en specifik plats

Du kan använda --out eller -o för att ange en plats för att placera filerna för de dumpade databaserna.

Exempel:

mongodump --out=data/backups/

Eller:

mongodump -o=data/backups/

I det här fallet matas varje databasmapp direkt till data/backups/ mapp (dvs. det finns ingen /dump/ mapp).

Säkerhetskopiera en specifik databas

Du kan använda --db parameter för att ange en databas som ska säkerhetskopieras.

mongodump --db=krankykranes

Detta dumpar krankykranes databas till standardvärdet dump/ mapp.

Säkerhetskopiera en specifik samling

Du kan använda --collection eller -c för att ange en samling som ska säkerhetskopieras.

Exempel:

mongodump --db=krankykranes --collection=products

Eller:

mongodump --db=krankykranes -c=products

Detta dumpar products samling till dump/krankykranes mapp.

Uteslut samlingar

Du kan också använda --excludeCollection parameter för att ange en specifik samling som ska exkluderas från säkerhetskopian (dvs. inte inkludera i säkerhetskopian).

Exempel:

mongodump --db=PetHotel --excludeCollection=employees

Detta dumpar alla samlingar från PetHotel databas förutom employees samling.

För att utesluta mer än en samling, använd en separat --excludeCollection parameter för varje samling som du vill exkludera.

Exempel:

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

Det exkluderar employees och students samlingar från säkerhetskopian.

Du kan också använda --excludeCollectionsWithPrefix parameter för att utesluta samlingar med ett givet prefix.

mongodump --db=PetHotel --excludeCollectionsWithPrefix=p

Det dumpar alla samlingar utom de som börjar med bokstaven p .

Följande exkluderar alla samlingar som börjar med pet .

mongodump --db=PetHotel --excludeCollectionsWithPrefix=pet

Du kan använda flera --excludeCollectionsWithPrefix argument för att utesluta samlingar med flera prefix.

Exempel:

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

Komprimera utdata

Du kan använda --gzip parameter för att komprimera utdata.

mongodump --gzip --db=krankykranes

Detta komprimerar de enskilda filerna.

tree dump

Resultat:

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

Vi kan se att alla filer har .gz förlängning.

Vid utmatning till en arkivfil eller standardutströmmen, --gzip alternativet komprimerar arkivfilen eller datautmatningen till strömmen.

Konvertera visningar till samlingar

Du kan använda --viewsAsCollections parameter för att exportera skrivskyddade vyer som samlingar.

mongodump --db=PetHotel --viewsAsCollections

När du exporterar en vy som en samling, mongodump producerar en BSON-fil som innehåller dokumenten i vyn. Om du använder mongorestore för att återställa den producerade BSON-filen kommer vyn att återställas som en samling.

Utan att använda detta argument, mongodump exporterar varje vys metadata. Om du inkluderar en vys metadatafil i en mongorestore operation återskapas vyn.

Använder --viewsAsCollections utelämnar också alla standardkollektioner. Därför, när jag kör ovanstående kod, min dump/ mappstrukturen ser ut så här:

tree dump

Resultat:

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

I mitt PetHotel databas, jag har en vy som heter pettypes . När jag exporterar detta som en vy är det bara metadata som exporteras. Men när jag konverterar den till en samling, en pettypes.bson fil skapas som inte skulle finnas där om jag hade exporterat vyn som en vy.

Här är vad som händer om jag exporterar den vyn utan att konvertera den till en samling.

mongodump --db=PetHotel --collection=pettypes

Kör sedan trädkommandot för att få mappstrukturen.

tree dump

Resultat:

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

Så vi kan se att bara metadata för vyn dumpas.

Tyst läge

Du kan använda --quiet parameter för att begränsa utdata i ditt terminal- eller kommandotolkfönster.

mongodump --quiet

Utan att använda detta kommer du förmodligen att se en stor lista över vyer, samlingar etc som säkerhetskopieras.

Verbose Mode

På baksidan kan du använda --verbose eller -v parametrar för att öka utdata i din terminal eller kommandotolksfönster.

mongodump --verbose

Du kan öka utförligheten genom att upprepa -v form flera gånger.

Exempel:

mongodump -vvvv

Att köra det på mitt system ökade mängden avsevärt.

Resultat av säkerhetskopiering

Du kan använda --query eller -q parametrar för att dumpa resultatet av en fråga.

Exempel:

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

När du gör detta, omge frågan med enstaka citattecken. Du kan använda dubbla citattecken för fälten.

Arkiv och standardutdata

Du kan använda --archive eller parameter för att skriva utdata till en specificerad arkivfil eller, om arkivfilen är ospecificerad, till standardutdata (stdout ) streama så att du kan gå vidare till en annan process.

Exempel på utmatning till en arkivfil:

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

I nästa exempel skriver jag till standardutgångsströmmen och skickar sedan till mongorestore :

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

Det resulterar i en ny samling som heter dogs visas i PetHotel databas (och samlingen innehåller bara dokument som har en type fält med värdet dog ).

Åtkomstkontroll

De tidigare exemplen gjordes på den lokala datorn med standardporten. Detta innebar att vi kunde köra mongodump utan att ange saker som --host , --port , --username , etc.

Här är ett exempel som använder dessa parametrar för att autentisera som homer :

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

Vi kunde också ha använt --password parameter, men det gjorde vi inte. Om du skickar --user men inte --password , kommer du att bli ombedd att ange lösenordet.

Mer information om mongodump

mongodump verktyget accepterar många andra användbara parametrar, och det finns också olika faktorer att ta hänsyn till när du använder det som en del av en säkerhetskopierings- och återställningsstrategi.

Se mongodump dokumentation på MongoDB-webbplatsen för mer information.

Andra alternativ

mongodump och mongorestore är enkla och effektiva verktyg för att säkerhetskopiera och återställa små MongoDB-distributioner, men är inte idealiska för att ta säkerhetskopior av större system.

Se MongoDB Backup Methods på MongoDB-webbplatsen för andra metoder för att säkerhetskopiera dina MongoDB-databaser.


  1. Använd redis för att skapa en realtidschatt med socket.io och NodeJs

  2. Redis - Användarnamn, lösenord och db?

  3. 10 frågor att ställa (och svara på) när du är värd för MongoDB på AWS

  4. Laravel Socket.io Ansluten men tar inte emot data