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.