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.