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

Eseguire il backup di un database MongoDB utilizzando mongodump

Esistono diversi modi per eseguire il backup di un database in MongoDB. Un modo rapido per eseguire il backup di un database è utilizzare mongodump strumento.

mongodump legge i dati da un database MongoDB e crea file BSON ad alta fedeltà che il mongorestore utilità può utilizzare per ripristinare un database MongoDB.

Con mongodump , puoi eseguire il backup di una raccolta, di un database o di tutti i database.

Cerca gli strumenti del database MongoDB

mongodump fa parte del pacchetto MongoDB Database Tools. I MongoDB Database Tools sono una suite di utilità da riga di comando per lavorare con MongoDB.

Potresti avere o meno il MongoDB Database Tools/mongodump installato. Prova a eseguire il seguente comando nel terminale o nel prompt dei comandi per verificare:

mongodump --version

Se non lo hai, puoi utilizzare le istruzioni di installazione sul sito Web di MongoDB per installarlo sul tuo sistema.

Dove eseguire i comandi?

Devi eseguire mongodump comandi dalla riga di comando del sistema (ad es. una nuova finestra del terminale o del prompt dei comandi).

Non eseguirli da mongo guscio.

Esegui il backup di tutti i database

Per eseguire il backup di tutti i database e le raccolte nell'istanza locale in esecuzione sulla porta predefinita 27017, utilizzare mongodump comando senza argomenti.

mongodump

L'esecuzione del codice precedente esegue il dump di tutti i database in una cartella denominata dump/ .

Nota che esclude il local e config banche dati.

Nota anche che mongodump acquisisce solo i documenti nel database. Quando esegui un ripristino, mongorestore o mongod deve ricostruire gli indici dopo aver ripristinato i dati.

Ecco come appaiono i file nel dump/ cartella.

tree dump

Risultato:

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

Questi file sono ovviamente specifici della mia installazione di MongoDB, che contiene database di test. Nel mio caso, sono stati scaricati 3 database:PetHotel , admin e krankykranes .

Backup in una posizione specifica

Puoi usare --out o -o per specificare una posizione in cui inserire i file per i database di cui è stato eseguito il dump.

Esempio:

mongodump --out=data/backups/

Oppure:

mongodump -o=data/backups/

In questo caso, ogni cartella del database viene emessa direttamente in data/backups/ cartella (cioè non c'è /dump/ cartella).

Backup di un database specifico

Puoi usare il --db parametro per specificare un database di cui eseguire il backup.

mongodump --db=krankykranes

Questo scarica i krankykranes database al valore predefinito dump/ cartella.

Esegui il backup di una raccolta specifica

Puoi usare --collection o -c per specificare una raccolta di cui eseguire il backup.

Esempio:

mongodump --db=krankykranes --collection=products

Oppure:

mongodump --db=krankykranes -c=products

Questo scarica i products raccolta nel dump/krankykranes cartella.

Raccolte escluse

Puoi anche utilizzare il --excludeCollection parametro per specificare una raccolta specifica da escludere dal backup (ovvero non includere nel backup).

Esempio:

mongodump --db=PetHotel --excludeCollection=employees

Questo scarica tutte le raccolte da PetHotel database ad eccezione dei employees raccolta.

Per escludere più di una raccolta, utilizza un --excludeCollection separato parametro per ogni raccolta che desideri escludere.

Esempio:

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

Ciò esclude i employees e students raccolte dal backup.

Puoi anche usare il --excludeCollectionsWithPrefix parametro per escludere raccolte con un determinato prefisso.

mongodump --db=PetHotel --excludeCollectionsWithPrefix=p

Questo esegue il dump di tutte le raccolte tranne quelle che iniziano con la lettera p .

La seguente esclude tutte le raccolte che iniziano con pet .

mongodump --db=PetHotel --excludeCollectionsWithPrefix=pet

Puoi utilizzare più --excludeCollectionsWithPrefix argomenti per escludere raccolte con più prefissi.

Esempio:

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

Comprimi l'output

Puoi usare il --gzip parametro per comprimere l'output.

mongodump --gzip --db=krankykranes

Questo comprime i singoli file.

tree dump

Risultato:

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

Possiamo vedere che tutti i file hanno il .gz estensione.

Quando si esegue l'output in un file di archivio o nel flusso di uscita standard, il --gzip l'opzione comprime il file di archivio o l'output dei dati nel flusso.

Converti visualizzazioni in raccolte

Puoi usare --viewsAsCollections parametro per esportare viste di sola lettura come raccolte.

mongodump --db=PetHotel --viewsAsCollections

Quando esporti una vista come raccolta, mongodump produce un file BSON contenente i documenti nella vista. Se usi mongorestore per ripristinare il file BSON prodotto, la vista verrà ripristinata come raccolta.

Senza usare questo argomento, mongodump esporta i metadati di ciascuna vista. Se includi il file di metadati di una vista in un mongorestore operazione, la vista viene ricreata.

Utilizzo di --viewsAsCollections omette anche tutte le raccolte standard. Pertanto, quando eseguo il codice sopra, il mio dump/ la struttura delle cartelle è simile a questa:

tree dump

Risultato:

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

Nel mio PetHotel database, ho una vista chiamata pettypes . Quando esporto questo come vista, vengono esportati solo i metadati. Ma quando lo converto in una raccolta, un pettypes.bson viene creato un file che non sarebbe presente se avessi esportato la vista come vista.

Ecco cosa succede se esporto quella vista senza convertirla in una raccolta.

mongodump --db=PetHotel --collection=pettypes

Quindi esegui il comando tree, per ottenere la struttura delle cartelle.

tree dump

Risultato:

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

Quindi possiamo vedere che vengono scaricati solo i metadati per la vista.

Modalità silenziosa

Puoi usare il --quiet parametro per limitare l'output nella finestra del terminale o del prompt dei comandi.

mongodump --quiet

Senza usarlo, probabilmente vedrai un grande elenco di visualizzazioni, raccolte, ecc. Di cui è stato eseguito il backup.

Modalità dettagliata

D'altra parte, puoi usare il --verbose o -v parametri da aumentare l'output nella finestra del Terminale o del prompt dei comandi.

mongodump --verbose

Puoi aumentare la verbosità ripetendo il -v formare più volte.

Esempio:

mongodump -vvvv

L'esecuzione sul mio sistema ha aumentato significativamente la verbosità.

Risultati della query di backup

Puoi usare il --query o -q parametri per scaricare il risultato di una query.

Esempio:

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

Quando si esegue questa operazione, racchiudere la query tra virgolette singole. Puoi utilizzare le virgolette doppie per i campi.

Archivi e output standard

Puoi usare il --archive o parametro per scrivere l'output in un file di archivio specificato o, se il file di archivio non è specificato, nello standard output (stdout ) in modo da poter reindirizzare a un altro processo.

Esempio di output in un file di archivio:

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

Nel prossimo esempio, scrivo nel flusso di output standard, quindi reindirizza a mongorestore :

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

Ciò si traduce in una nuova raccolta chiamata dogs che appare nel PetHotel database (e la raccolta contiene solo documenti che hanno un type campo con un valore di dog ).

Controllo accessi

Gli esempi precedenti sono stati eseguiti sulla macchina locale utilizzando la porta predefinita. Ciò significava che siamo stati in grado di eseguire mongodump senza specificare cose come --host , --port , --username , ecc.

Ecco un esempio che utilizza questi parametri per autenticarsi come homer :

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

Avremmo potuto anche usare il --password parametro, ma non l'abbiamo fatto. Se passi --user ma non --password , ti verrà richiesta la password.

Ulteriori informazioni su mongodump

Il mongodump utility accetta molti altri parametri utili e ci sono anche vari fattori da considerare quando lo si utilizza come parte di una strategia di backup e ripristino.

Vedi il mongodump documentazione sul sito Web MongoDB per ulteriori informazioni.

Altre opzioni

mongodump e mongorestore sono strumenti semplici ed efficienti per il backup e il ripristino di piccole distribuzioni MongoDB, ma non sono ideali per acquisire backup di sistemi più grandi.

Vedere Metodi di backup MongoDB sul sito Web MongoDB per altri metodi per il backup dei database MongoDB.