L’autore ha selezionato il Fondo di Soccorso COVID-19 per ricevere una donazione come parte del programma Scrivi per Donazioni.
Introduzione
MongoDB è uno dei motori di database NoSQL più popolari. È famoso per essere scalabile, robusto, affidabile e facile da usare. In questo articolo, eseguirai il backup, il ripristino e la migrazione di un database MongoDB di esempio.
Importare ed esportare un database significa gestire i dati in un formato leggibile dall’uomo e compatibile con altri prodotti software. Al contrario, le operazioni di backup e ripristino di MongoDB creano o utilizzano dati binari specifici di MongoDB, che preservano non solo la coerenza e l’integrità dei tuoi dati, ma anche i loro attributi specifici di MongoDB. Pertanto, per la migrazione, di solito è preferibile utilizzare il backup e il ripristino purché i sistemi di origine e di destinazione siano compatibili.
Prerequisiti
Prima di seguire questo tutorial, assicurati di completare i seguenti prerequisiti:
- Un server Ubuntu 20.04 con un utente non root con privilegi sudo e un firewall, che puoi configurare con la guida alla configurazione iniziale del server Ubuntu 20.04.
- MongoDB installato e configurato utilizzando il Tutorial su Come Installare MongoDB su Ubuntu 20.04.
- Esempio di database MongoDB importato utilizzando le istruzioni in Come Importare ed Esportare un Database MongoDB.
Salvo diversamente specificato, tutti i comandi che richiedono privilegi di root in questo tutorial devono essere eseguiti da un utente non root con privilegi sudo.
Passaggio 1 — Utilizzo di JSON e BSON in MongoDB
Prima di procedere ulteriormente con questo articolo, è necessaria una comprensione di base della materia. Se hai esperienza con altri sistemi di database NoSQL come Redis, potresti trovare alcune somiglianze quando lavori con MongoDB.
MongoDB utilizza i formati JSON e BSON (JSON binario) per memorizzare le sue informazioni. JSON è il formato leggibile dall’uomo perfetto per l’esportazione e, alla fine, l’importazione dei dati. Puoi gestire ulteriormente i dati esportati con qualsiasi strumento che supporti JSON, compreso un semplice editor di testo.
Un esempio di documento .json
appare così:
{"address":[
{"building":"1007", "street":"Park Ave"},
{"building":"1008", "street":"New Ave"},
]}
JSON è comodo da utilizzare, ma non supporta tutti i tipi di dati disponibili in BSON. Ciò significa che ci sarà una cosiddetta ‘perdita di fedeltà’ delle informazioni se si utilizza JSON. Per il backup e il ripristino, è meglio utilizzare BSON binario.
In secondo luogo, non è necessario preoccuparsi di creare esplicitamente un database MongoDB. Se il database specificato per l’importazione non esiste già, viene creato automaticamente. Ancora meglio è il caso della struttura delle raccolte (tabelle del database). Al contrario di altri motori di database, in MongoDB la struttura viene nuovamente creata automaticamente al momento del primo inserimento del documento (riga del database).
In terzo luogo, in MongoDB, la lettura o l’inserimento di grandi quantità di dati, come i compiti di questo articolo, può essere intensivo in termini di risorse e consumare gran parte della CPU, della memoria e dello spazio su disco. Questo è critico considerando che MongoDB viene utilizzato frequentemente per grandi database e Big Data. La soluzione più semplice a questo problema è eseguire le esportazioni e i backup durante la notte o in ore non di punta.
Quarto, la coerenza delle informazioni potrebbe essere problematica se hai un server MongoDB molto occupato dove le informazioni cambiano durante il processo di esportazione o backup del database. Una possibile soluzione a questo problema è la replicazione, che potresti prendere in considerazione quando avanzi nell’argomento MongoDB.
Anche se puoi utilizzare le funzioni di importazione ed esportazione per eseguire il backup e il ripristino dei tuoi dati, ci sono modi migliori per garantire l’integrità completa dei tuoi database MongoDB. Per eseguire il backup dei tuoi dati, dovresti utilizzare il comando mongodump
. Per il ripristino, utilizza mongorestore
. Vediamo come funzionano.
Passaggio 2 — Utilizzo di mongodump
per eseguire il backup di un database MongoDB
Cominciamo con il backup del tuo database MongoDB.
Un argomento essenziale per mongodump
è --db
, che specifica il nome del database che si desidera eseguire il backup. Se non si specifica un nome del database, mongodump
eseguirà il backup di tutti i database. Il secondo argomento importante è --out
, che definisce la directory in cui i dati verranno dumpati. Ad esempio, eseguiamo il backup del database newdb
e lo memorizziamo nella directory /var/backups/mongobackups
. Idealmente, avremo ciascuno dei nostri backup in una directory con la data corrente come /var/backups/mongobackups/10-29-20
.
Prima crea quella directory /var/backups/mongobackups
:
Quindi esegui mongodump
:
Vedrai un output come questo:
Output2020-10-29T19:22:36.886+0000 writing newdb.restaurants to
2020-10-29T19:22:36.969+0000 done dumping newdb.restaurants (25359 documents)
Nota che nel percorso della directory sopra, hai usato date +'%m-%d-%y'
per ottenere automaticamente la data corrente. Questo ti permetterà di avere i backup all’interno della directory come /var/backups/10-29-20/
, il che lo rende particolarmente conveniente per automatizzare i backup.
A questo punto, hai un backup completo del database newdb
nella directory /var/backups/mongobackups/10-29-20/newdb/
. Questo backup ha tutto per ripristinare correttamente il newdb
e preservarne la cosiddetta “fedeltà”.
Come regola generale, si dovrebbero fare regolari backup, preferibilmente quando il server è meno carico. Pertanto, è possibile impostare il comando mongodump
come un cron job in modo che venga eseguito regolarmente, ad esempio ogni giorno alle 03:03 del mattino.
Per fare ciò, apri crontab
, l’editor di cron:
Quando esegui sudo crontab
, modificherai i cron job per l’utente root. Questo è consigliato perché se imposti i cron per il tuo utente, potrebbero non eseguirsi correttamente, specialmente se il tuo profilo sudo richiede la verifica della password.
All’interno del prompt crontab, inserisci il seguente comando mongodump
:
Nel comando sopra, omettiamo l’argomento --db
apposta perché di solito vorrai eseguire il backup di tutti i tuoi database. Inoltre, il carattere speciale %
deve essere scapato per conformarsi alla sintassi cron.
A seconda delle dimensioni dei tuoi database MongoDB, potresti presto esaurire lo spazio su disco con troppi backup. Ecco perché è anche consigliabile eliminare regolarmente i vecchi backup o comprimerli.
Per esempio, per eliminare tutti i backup più vecchi di sette giorni, puoi usare il seguente comando bash:
Similmente al precedente comando mongodump
, puoi anche aggiungere questo come un cron job. Dovrebbe essere eseguito poco prima di avviare il prossimo backup; per il lavoro delle 03:03 AM, questa eliminazione verrà eseguita alle 03:01 AM. Riapri crontab di nuovo:
Inserisci la seguente riga:
Salva e chiudi il file.
Completare tutti i compiti in questo passaggio garantirà una corretta soluzione di backup per i tuoi database MongoDB. Successivamente, ripristinerai il database.
Passaggio 3 — Utilizzo di mongorestore
per Ripristinare e Migrare un Database MongoDB
Quando ripristini il tuo database MongoDB da un backup precedente, hai una copia esatta delle informazioni del tuo MongoDB prese in un determinato momento, compresi tutti gli indici e i tipi di dati, il che è particolarmente utile quando vuoi migrare i tuoi database MongoDB. Per ripristinare MongoDB, utilizzeremo il comando mongorestore
, che funziona con i backup binari prodotti da mongodump
.
Continuiamo i nostri esempi con il database newdb
e vediamo come possiamo ripristinarlo dal backup precedentemente effettuato. Specificheremo prima il nome del database con l’argomento --nsInclude
. Utilizzeremo newdb.*
per ripristinare tutte le raccolte. Per ripristinare una singola raccolta come restaurants
, utilizza invece newdb.restaurants
.
Quindi, utilizzando --drop
, ci assicureremo che il database di destinazione venga prima eliminato in modo che il backup venga ripristinato in un database pulito. Come argomento finale specificheremo la directory dell’ultimo backup, che assomiglierà a qualcosa del genere: /var/backups/mongobackups/10-29-20/newdb/
.
Una volta che hai un backup con timestamp, puoi ripristinarlo utilizzando questo comando (aggiornando la data per farla corrispondere alla tua):
Vedrai un output simile a questo:
Output2020-10-29T19:25:45.825+0000 the --db and --collection args should only be used when restoring from a BSON file. Other uses are deprecated and will not exist in the future; use --nsInclude instead
2020-10-29T19:25:45.826+0000 building a list of collections to restore from /var/backups/mongobackups/10-29-20/newdb dir
2020-10-29T19:25:45.829+0000 reading metadata for newdb.restaurants from /var/backups/mongobackups/10-29-20/newdb/restaurants.metadata.json
2020-10-29T19:25:45.834+0000 restoring newdb.restaurants from /var/backups/mongobackups/10-29-20/newdb/restaurants.bson
2020-10-29T19:25:46.130+0000 no indexes to restore
2020-10-29T19:25:46.130+0000 finished restoring newdb.restaurants (25359 documents)
2020-10-29T19:25:46.130+0000 done
Nel caso sopra descritto, stiamo ripristinando i dati sullo stesso server dove abbiamo creato il backup. Se desideri migrare i dati su un altro server e utilizzare la stessa tecnica, dovresti copiare la directory del backup, che è /var/backups/mongobackups/10-29-20/newdb/
nel nostro caso, sull’altro server.
Conclusione
Ora hai eseguito alcune attività essenziali relative al backup, al ripristino e alla migrazione dei tuoi database MongoDB. Nessun server MongoDB di produzione dovrebbe mai funzionare senza una strategia di backup affidabile, come quella descritta qui.
Puoi trovare altri tutorial su come configurare e utilizzare MongoDB in questi articoli della community di DigitalOcean. Ti invitiamo inoltre a consultare la documentazione ufficiale di MongoDB, in quanto è una risorsa preziosa sulle possibilità offerte da MongoDB.