Tutorial

Comment sauvegarder, restaurer et migrer une base de données MongoDB sur Ubuntu 20.04

Published on April 7, 2021
Default avatar

By Toli

Français
Comment sauvegarder, restaurer et migrer une base de données MongoDB sur Ubuntu 20.04

L’auteur a choisi le COVID-19 Relief Fund pour recevoir un don dans le cadre du programme Write for DOnations.

Introduction

MongoDB est l’un des moteurs de base de données NoSQL les plus populaires. Il doit sa célébrité à son évolutivité, sa robustesse, sa fiabilité et sa facilité d’utilisation. À l’aide de cet article, vous allez sauvegarder, restaurer et migrer un échantillon de base de données MongoDB.

Lorsque l’on parle d’importation et d’exportation d’une base de données, nous faisons référence à la gestion de données sous un format lisible par l’homme et qui sont compatibles avec d’autres produits logiciels. En revanche, les opérations de sauvegarde et de restauration de MongoDB créent ou utilisent des données binaires spécifiques à MongoDB. Elles préservent non seulement la cohérence et l’intégrité de vos données mais également leurs attributs MongoDB spécifiques. Par conséquent, lors de la migration, il est généralement recommandé d’utiliser la sauvegarde et la restauration dans la mesure où les systèmes source et cible sont compatibles.

Conditions préalables

Avant de suivre ce tutoriel, vérifiez si vous répondez bien aux conditions préalables suivantes :

Sauf indication contraire, toutes les commandes qui nécessitent des privilèges root dans ce tutoriel doivent être exécutées en tant que non-root user avec des privilèges sudo.

Étape 1 — Utiliser JSON et BSON dans MongoDB

Avant de poursuivre avec cet article, vous devez avoir quelques connaissances de base sur le sujet. Si vous avez de l’expérience avec d’autres systèmes de base de données NoSQL comme Redis, il se peut que vous trouviez quelques similitudes avec MongoDB.

MongoDB utilise les formats JSON et BSON (JSON binaire) pour stocker ses informations. JSON est le format lisible par l’homme, idéal pour exporter et éventuellement importer vos données. Vous pouvez également gérer vos données exportées avec tout outil qui prend en charge JSON et notamment un éditeur de texte simple.

Voici à quoi ressemble un exemple de document JSON :

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

Bien que le format JSON soit pratique pour travailler, il ne prend cependant pas en charge tous les types de données disponibles dans BSON. Cela signifie que, si vous utilisez JSON, vous ferez l’expérience de ce que l’on nomme une « perte de fidélité » des informations. Que ce soit pour la sauvegarde ou la restauration, il est donc préférable d’utiliser le format binaire BSON.

Deuxièmement, vous n’aurez plus à vous soucier de créer explicitement une base de données MongoDB. Si la base de données spécifiée que vous souhaitez importer n’existe pas encore, elle sera automatiquement créée. Cette fonctionnalité est encore plus pratique avec la structure des collections (tables de la base de données). Contrairement à d’autres moteurs de base de données, dans MongoDB, la structure est également créée automatiquement à l’insertion du premier document (ligne de la base de données).

Troisièmement, dans MongoDB, il se peut que la lecture et l’insertion de grandes quantités de données, (comme les tâches de cet article par exemple) exigent un volume intensif de ressources et consomment une grande partie de votre CPU, de votre mémoire et de votre espace disque. Ce point est crucial, car on utilise fréquemment MongoDB avec de grandes bases de données et les Big Data. Pour palier ce problème, la solution la plus simple consiste à exécuter les exportations et les sauvegardes pendant la nuit ou en-dehors des heures de pointe.

Quatrièmement, il se peut que la cohérence des informations pose des problèmes si le serveur MongoDB est occupé et si les informations qui s’y trouvent changent pendant le processus d’exportation ou de sauvegarde de la base de données. Il existe une solution possible à ce problème qui est la réplication. Vous pourrez envisager de l’utiliser une fois que vous en saurez davantage sur MongoDB.

Bien que vous puissiez utiliser les fonctions import et export pour sauvegarder et restaurer vos données, il existe de meilleures façons d’assurer la complète intégrité de vos bases de données MongoDB. Pour sauvegarder vos données, nous vous recommandons d’utiliser la commande mongodump. Pour la restauration, utilisez mongorestore. Voyons comment ces deux commandes fonctionnent.

Étape 2 — Utiliser mongodump pour sauvegarder une base de données MongoDB

Examinons tout d’abord de quelle manière sauvegarder votre base de données MongoDB.

Un des arguments essentiels de mongodump est --db. Il spécifie le nom de la base de données que vous souhaitez sauvegarder. Si vous omettez de spécifier le nom de la base de données, mongodump procédera à la sauvegarde de toutes vos bases de données. Le second argument important est --out. Il permet de définir le répertoire dans lequel les données seront déchargées. Par exemple, sauvegardons la base de données newdb et sauvegardons-la dans le répertoire /var/backups/mongobackups. Idéalement, chacune de nos sauvegardes devraient se trouver dans un répertoire affichant la date du jour comme suit : /var/backups/mongobacackup/10-29-20.

Créez tout d’abord ce répertoire /var/backups/mongobackups :

  1. sudo mkdir /var/backups/mongobackups

Ensuite, exécutez mongodump :

  1. sudo mongodump --db newdb --out /var/backups/mongobackups/`date +"%m-%d-%y"`

Vous verrez un résultat similaire à ce qui suit :

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)

Notez que, dans le chemin du répertoire ci-dessus, nous avons utilisé date +"%m-%d-%y qui permet d’obtenir la date du jour automatiquement. Nos sauvegardes se trouveront ainsi dans le répertoire nommé de la manière suivante : /var/backups/10-29-20/. Ceci est particulièrement pratique pour automatiser les sauvegardes.

À ce stade, vous disposez d’une sauvegarde complète de la base de données newdb dans le répertoire /var/backups/mongobackups/10-29-20/newdb/. Cette sauvegarde intègre tout ce dont vous avez besoin pour restaurer la newdb correctement et préserver sa dénommée « fidélité ».

En règle générale, vous devriez régulièrement procéder à des sauvegardes, de préférence au moment où le serveur est le moins chargé. Par conséquent, vous pouvez configurer la commande mongodump comme un travail cron afin qu’elle s’exécute régulièrement, par exemple, chaque jour à 03:03 du matin.

Pour cela, ouvrez crontab, l’éditeur de cron :

  1. sudo crontab -e

Notez que, lorsque vous exécutez sudo crontab, vous allez modifier les tâches cron pour le root user. Cette commande est recommandée. En effet, si vous configurez les crons pour votre utilisateur, ils ne s’exécuteront pas correctement, surtout si votre profil sudo nécessite une vérification du mot de passe.

Dans l’invite crontab, insérez la commande mongodump suivante :

crontab
3 3 * * * mongodump --out /var/backups/mongobackups/`date +"%m-%d-%y"`

Dans la commande ci-dessus, nous avons omis l’argument --db sur l’objet délibérément, car vous souhaiterez généralement sauvegarder toutes vos bases de données.

En fonction de la taille de votre base de données MongoDB, vous devriez rapidement manquer d’espace disque à cause du nombre élevé de sauvegardes. C’est pourquoi il est également recommandé de nettoyer ou de compresser régulièrement les anciennes sauvegardes.

Par exemple, si vous souhaitez supprimer toutes les sauvegardes de plus de sept jours, vous pouvez utiliser la commande bash suivante :

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

De la même manière que la commande mongodump précédente, vous pouvez également ajouter cette commande en tant que cron. Elle devra être exécutée juste avant de commencer la prochaine sauvegarde, par exemple, à 03:01 du matin. Pour cela, ouvrez à nouveau crontab :

  1. sudo crontab -e

Ensuite, insérez la ligne suivante :

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

Enregistrez et fermez le fichier.

En exécutant toutes les tâches de cette étape, vous disposerez d’une solution de sauvegarde adaptée à vos bases de données MongoDB.

Étape 3 — Utiliser mongorestore pour restaurer et migrer une base de données MongoDB

Lorsque vous restaurez votre base de données MongoDB à l’aide d’une sauvegarde précédente, vous obtenez la copie exacte de vos informations MongoDB à un moment particulier qui inclut tous les index et les types de données. Ceci est particulièrement utile pour migrer vos bases de données MongoDB. Pour restaurer MongoDB, nous allons utiliser la commande mongorestore qui fonctionne avec les sauvegardes binaires générées par mongodump.

Continuons à travailler sur nos exemples avec la base de données newdb pour voir de quelle manière nous pouvons la restaurer à partir de la sauvegarde précédemment réalisée. Nous allons tout d’abord spécifier le nom de la base de données en utilisant l’argument --nsInclude. Nous allons ensuite utiliser newdb.* pour restaurer toutes les collections. Pour restaurer une collection unique, comme restaurants, utilisez plutôt newdb.restaurants.

Puis, en utilisant --drop, nous allons veiller à ce que la base de données cible soit tout d’abord supprimée afin que la sauvegarde puisse être restaurée dans une base de données propre. Pour finir, nous allons spécifier le répertoire de la dernière sauvegarde, dont l’appellation devrait ressembler à ce qui suit : /var/backups/mongobackups/10-29-20/newdb/.

Une fois que vous disposez d’une sauvegarde horodatée, vous pouvez la restaurer en utilisant la commande suivante :

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

Vous verrez un résultat similaire à ce qui suit :

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

Dans le cas ci-dessus, nous avons restauré les données sur le serveur dans lequel nous avons créé la sauvegarde. Si vous souhaitez migrer les données sur un autre serveur et utiliser la même technique, vous devrez alors copier le répertoire de sauvegarde, c’est-à-dire /var/backups/mongobackups/10-29-20/newdb/ dans notre cas, sur l’autre serveur.

Conclusion

Vous avez désormais exécuté quelques-unes des tâches essentielles liées à la sauvegarde, la restauration et la migration de vos bases de données MongoDB. Aucun serveur MongoDB de production ne devrait jamais être exécuté sans une stratégie de sauvegarde fiable, comme celle décrite ici.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about us


About the authors
Default avatar
Toli

author



Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more
DigitalOcean Cloud Control Panel