Hoe een MongoDB-database Back-uppen, Herstellen en Migreren op Ubuntu 20.04

De auteur heeft het COVID-19-noodfonds geselecteerd om een donatie te ontvangen als onderdeel van het Schrijf voor Donaties-programma.

Introductie

MongoDB is een van de meest populaire NoSQL-database-engines. Het staat bekend om zijn schaalbaarheid, robuustheid, betrouwbaarheid en gebruiksgemak. In dit artikel zul je een voorbeeld MongoDB-database back-uppen, herstellen en migreren.

Het importeren en exporteren van een database betekent omgaan met gegevens in een menselijk leesbaar formaat dat compatibel is met andere softwareproducten. In tegenstelling tot de back-up- en herstelbewerkingen van MongoDB, die MongoDB-specifieke binaire gegevens maken of gebruiken, die niet alleen de consistentie en integriteit van uw gegevens behouden, maar ook de specifieke MongoDB-attributen ervan behouden. Daarom is het voor migratie meestal beter om back-up en herstel te gebruiken, zolang de bron- en doelsystemen compatibel zijn.

Vereisten

Voordat u deze tutorial volgt, zorg ervoor dat u aan de volgende vereisten voldoet:

Tenzij anders vermeld, moeten alle commando’s die rootmachtigingen vereisen in deze tutorial worden uitgevoerd als een niet-rootgebruiker met sudo-machtigingen.

Stap 1 — Gebruik van JSON en BSON in MongoDB

Voordat u verder gaat met dit artikel, is enige basiskennis van het onderwerp nodig. Als u ervaring heeft met andere NoSQL-databasesystemen zoals Redis, kunt u enkele overeenkomsten vinden bij het werken met MongoDB.

MongoDB gebruikt JSON- en BSON-formaten (binair JSON) voor het opslaan van informatie. JSON is het menselijk leesbare formaat dat perfect is voor exporteren en uiteindelijk importeren van uw gegevens. U kunt uw geëxporteerde gegevens verder beheren met een tool die JSON ondersteunt, inclusief een eenvoudige teksteditor.

Een voorbeeld van een .json-document ziet er als volgt uit:

Example of JSON Format
{"address":[
    {"building":"1007", "street":"Park Ave"},
    {"building":"1008", "street":"New Ave"},
]}

JSON is handig om mee te werken, maar ondersteunt niet alle gegevenstypen die beschikbaar zijn in BSON. Dit betekent dat er sprake zal zijn van ‘verlies van nauwkeurigheid’ van de informatie als u JSON gebruikt. Voor het maken van back-ups en het herstellen van gegevens is het daarom beter om het binaire BSON-formaat te gebruiken.

Ten tweede hoeft u zich geen zorgen te maken over het expliciet aanmaken van een MongoDB-database. Als de database die u opgeeft voor importeren nog niet bestaat, wordt deze automatisch aangemaakt. Nog beter is het geval met de structuur van de collecties (databasetabellen). In tegenstelling tot andere databasesystemen wordt de structuur in MongoDB opnieuw automatisch aangemaakt bij de eerste invoeging van een document (databaserij).

Ten derde kan het lezen of invoegen van grote hoeveelheden gegevens, zoals de taken in dit artikel, in MongoDB veel middelen verbruiken en veel van uw CPU, geheugen en schijfruimte in beslag nemen. Dit is kritisch gezien MongoDB vaak wordt gebruikt voor grote databases en big data. De eenvoudigste oplossing voor dit probleem is om de exports en back-ups ’s nachts of tijdens niet-piekuren uit te voeren.

Vierde, informatieconsistentie kan een probleem vormen als u een drukke MongoDB-server heeft waar de informatie verandert tijdens het exporteren of back-uppen van de database. Een mogelijke oplossing voor dit probleem is replicatie, wat u kunt overwegen wanneer u verder gaat in het onderwerp MongoDB.

Hoewel u de import- en exportfuncties kunt gebruiken om uw gegevens te back-uppen en te herstellen, zijn er betere manieren om de volledige integriteit van uw MongoDB-databases te waarborgen. Gebruik voor het back-uppen van uw gegevens het commando mongodump. Voor het herstellen, gebruik mongorestore. Laten we eens kijken hoe ze werken.

Stap 2 — Gebruik van mongodump om een MongoDB-database te back-uppen

Laten we eerst bekijken hoe u uw MongoDB-database kunt back-uppen.

Een essentieel argument voor mongodump is --db, dat de naam van de database aangeeft die je wilt back-uppen. Als je geen databasenaam opgeeft, maakt mongodump een back-up van al je databases. Het tweede belangrijke argument is --out, dat de directory definieert waarin de gegevens worden gedumpt. Laten we bijvoorbeeld de newdb-database back-uppen en deze opslaan in de /var/backups/mongobackups-directory. Ideaal gezien hebben we elk van onze back-ups in een directory met de huidige datum zoals /var/backups/mongobackups/10-29-20.

Maak eerst die directory /var/backups/mongobackups aan:

  1. sudo mkdir /var/backups/mongobackups

Voer vervolgens mongodump uit:

  1. sudo mongodump --db newdb --out /var/backups/mongobackups/$(date +'%m-%d-%y')

Je zult een uitvoer zien zoals deze:

Output
2020-10-29T19:22:36.886+0000 writing newdb.restaurants to 2020-10-29T19:22:36.969+0000 done dumping newdb.restaurants (25359 documents)

Let op dat je in het bovenstaande directory pad date +'%m-%d-%y' hebt gebruikt om automatisch de huidige datum te verkrijgen. Dit stelt je in staat om back-ups binnen de directory te hebben zoals /var/backups/10-29-20/, wat vooral handig is voor het automatiseren van back-ups.

Op dit punt heb je een volledige back-up van de newdb-database in de directory /var/backups/mongobackups/10-29-20/newdb/. Deze back-up bevat alles om de newdb correct te herstellen en de zogenaamde “fidelity” te behouden.

Als algemene regel moet je regelmatig back-ups maken, bij voorkeur wanneer de server het minst belast is. Zo kun je het mongodump-commando instellen als een cronjob zodat het regelmatig wordt uitgevoerd, bijvoorbeeld elke dag om 03:03 uur.

Om dit te bereiken, open crontab, de editor van cron:

  1. sudo crontab -e

Wanneer je sudo crontab uitvoert, bewerk je de cron-jobs voor de rootgebruiker. Dit wordt aanbevolen omdat als je de crons instelt voor je gebruiker, ze mogelijk niet goed worden uitgevoerd, vooral als je sudo-profiel wachtwoordverificatie vereist.

Binnen de crontab-prompt, voeg het volgende mongodump commando in:

crontab
  1. 3 3 * * * mongodump --out /var/backups/mongobackups/$(date +'\%m-\%d-\%y')

In het bovenstaande commando laten we opzettelijk het --db argument weg omdat je meestal al je databases wilt laten back-uppen. Ook moet het speciale karakter % worden ontsnapt om te voldoen aan de cron-syntaxis.

Afhankelijk van de grootte van je MongoDB-databases, kun je al snel te weinig schijfruimte hebben met te veel back-ups. Daarom wordt ook aanbevolen om de oude back-ups regelmatig op te schonen of te comprimeren.

Om bijvoorbeeld alle back-ups ouder dan zeven dagen te verwijderen, kun je het volgende bash-commando gebruiken:

  1. find /var/backups/mongobackups/ -mtime +7 -exec rm -rf {} \;

Vergelijkbaar met het vorige mongodump commando, kun je dit ook toevoegen als een cron-job. Het moet worden uitgevoerd vlak voordat je de volgende back-up start; voor de taak van 03:03 uur zal deze verwijdering om 03:01 uur worden uitgevoerd. Open opnieuw crontab:

  1. sudo crontab -e

Voeg de volgende regel toe:

crontab
  1. 1 3 * * * find /var/backups/mongobackups/ -mtime +7 -exec rm -rf {} \;

Sla het bestand op en sluit het.

Het voltooien van alle taken in deze stap zorgt voor een goede back-upoplossing voor je MongoDB-databases. Hierna zul je de database herstellen.

Stap 3 — Gebruik mongorestore om een MongoDB-database te herstellen en migreren

Wanneer je je MongoDB-database herstelt vanuit een eerdere back-up, heb je een exacte kopie van je MongoDB-informatie zoals die op een bepaald moment is genomen, inclusief alle indexen en gegevenstypen, wat vooral handig is wanneer je je MongoDB-databases wilt migreren. Voor het herstellen van MongoDB zullen we de opdracht mongorestore gebruiken, die werkt met de binaire back-ups die mongodump produceert.

Laten we onze voorbeelden voortzetten met de database newdb en zien hoe we deze kunnen herstellen vanuit de eerder genomen back-up. We zullen eerst de naam van de database specificeren met het argument --nsInclude. We zullen newdb.* gebruiken om alle collecties te herstellen. Als je bijvoorbeeld een enkele collectie zoals restaurants wilt herstellen, gebruik dan in plaats daarvan newdb.restaurants.

Vervolgens zullen we met behulp van --drop ervoor zorgen dat de doeldatabase eerst wordt verwijderd, zodat de back-up wordt hersteld in een schone database. Als laatste argument zullen we de map van de laatste back-up specificeren, die er ongeveer zo uitziet: /var/backups/mongobackups/10-29-20/newdb/.

Zodra je een back-up met tijdstempel hebt, kun je deze herstellen met deze opdracht (waarbij je de datum bijwerkt om overeen te komen met die van jou):

  1. sudo mongorestore --db newdb --drop /var/backups/mongobackups/10-29-20/newdb/

Je ziet een uitvoer zoals deze:

Output
2020-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

In het bovenstaande geval herstellen we de gegevens op dezelfde server waar we de back-up hebben gemaakt. Als u de gegevens wilt migreren naar een andere server en dezelfde techniek wilt gebruiken, moet u de back-updirectory kopiëren, die in ons geval /var/backups/mongobackups/10-29-20/newdb/ is, naar de andere server.

Conclusie

U heeft nu enkele essentiële taken uitgevoerd met betrekking tot het maken van back-ups, het herstellen en migreren van uw MongoDB-databases. Geen enkele productieserver van MongoDB mag ooit draaien zonder een betrouwbare back-upstrategie, zoals hier beschreven.

U kunt meer tutorials vinden over hoe u MongoDB kunt configureren en gebruiken in deze artikelen van de DigitalOcean-community. We moedigen u ook aan om de officiële MongoDB-documentatie te raadplegen, omdat het een geweldige bron is over de mogelijkheden die MongoDB biedt.

Source:
https://www.digitalocean.com/community/tutorials/how-to-back-up-restore-and-migrate-a-mongodb-database-on-ubuntu-20-04