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

L’auteur a sélectionné le Fonds de secours COVID-19 pour recevoir une donation 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 est célèbre pour être évolutif, robuste, fiable et facile à utiliser. Dans cet article, vous sauvegarderez, restaurerez et migrerez une base de données MongoDB d’exemple.

Importer et exporter une base de données signifie manipuler des données dans un format lisible par l’homme et compatible 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, ce qui préserve non seulement la cohérence et l’intégrité de vos données, mais aussi ses attributs spécifiques à MongoDB. Ainsi, pour la migration, il est généralement préférable d’utiliser la sauvegarde et la restauration tant que les systèmes source et cible sont compatibles.

Prérequis

Avant de suivre ce tutoriel, assurez-vous de remplir les prérequis suivants :

Sauf indication contraire, toutes les commandes nécessitant des privilèges root dans ce tutoriel doivent être exécutées en tant qu’utilisateur non root avec des privilèges sudo.

Étape 1 — Utilisation de JSON et BSON dans MongoDB

Avant de continuer davantage avec cet article, une compréhension de base du sujet est nécessaire. Si vous avez de l’expérience avec d’autres systèmes de base de données NoSQL tels que Redis, vous pouvez trouver des similitudes en travaillant avec MongoDB.

MongoDB utilise les formats JSON et BSON (JSON binaire) pour stocker ses informations. JSON est le format lisible par l’homme, parfait pour exporter et, éventuellement, importer vos données. Vous pouvez ensuite gérer vos données exportées avec n’importe quel outil prenant en charge JSON, y compris un simple éditeur de texte.

Un exemple de document .json ressemble à ceci :

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

JSON est pratique à utiliser, mais il ne prend pas en charge tous les types de données disponibles dans BSON. Cela signifie qu’il y aura une « perte de fidélité » des informations si vous utilisez JSON. Pour la sauvegarde et la restauration, il est préférable d’utiliser le format binaire BSON.

Deuxièmement, vous n’avez pas à vous soucier de créer explicitement une base de données MongoDB. Si la base de données que vous spécifiez pour l’importation n’existe pas déjà, elle est automatiquement créée. Mieux encore, il en va de même pour la structure des collections (tables de base de données). Contrairement à d’autres moteurs de base de données, dans MongoDB, la structure est à nouveau créée automatiquement lors de la première insertion de document (ligne de base de données).

Troisièmement, dans MongoDB, la lecture ou l’insertion de grandes quantités de données, telles que les tâches de cet article, peut être gourmande en ressources et consommer une grande partie de votre CPU, de votre mémoire et de votre espace disque. Ceci est critique étant donné que MongoDB est fréquemment utilisé pour de grandes bases de données et le Big Data. La solution la plus simple à ce problème est d’exécuter les exports et les sauvegardes pendant la nuit ou en dehors des heures de pointe.

Quatrièmement, la cohérence des informations pourrait poser problème si vous avez un serveur MongoDB chargé où les informations changent pendant le processus d’exportation ou de sauvegarde de la base de données. Une solution possible à ce problème est la réplication, que vous pouvez envisager lorsque vous approfondissez le sujet de MongoDB.

Bien que vous puissiez utiliser les fonctions d’importation et d’exportation pour sauvegarder et restaurer vos données, il existe de meilleures façons d’assurer l’intégrité complète de vos bases de données MongoDB. Pour sauvegarder vos données, vous devriez utiliser la commande mongodump. Pour restaurer, utilisez mongorestore. Voyons comment ils fonctionnent.

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

Commençons par sauvegarder votre base de données MongoDB.

Un argument essentiel pour mongodump est --db, qui spécifie le nom de la base de données que vous souhaitez sauvegarder. Si vous ne spécifiez pas de nom de base de données, mongodump sauvegarde toutes vos bases de données. Le deuxième argument important est --out, qui définit le répertoire dans lequel les données seront sauvegardées. Par exemple, sauvegardons la base de données newdb et stockons-la dans le répertoire /var/backups/mongobackups. Idéalement, nous aurons chacune de nos sauvegardes dans un répertoire avec la date actuelle comme /var/backups/mongobackups/10-29-20.

Commencez par créer 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 une sortie comme ceci :

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, vous avez utilisé date +'%m-%d-%y' pour obtenir automatiquement la date actuelle. Cela vous permettra d’avoir des sauvegardes à l’intérieur du répertoire comme /var/backups/10-29-20/, ce qui 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 contient tout pour restaurer correctement newdb et préserver sa « fidélité ».

En règle générale, vous devriez effectuer des sauvegardes régulières, de préférence lorsque le serveur est moins chargé. Ainsi, vous pouvez définir la commande mongodump comme une tâche cron pour qu’elle s’exécute régulièrement, par exemple tous les jours à 03h03.

Pour ce faire, ouvrez crontab, l’éditeur de cron :

  1. sudo crontab -e

Lorsque vous exécutez sudo crontab, vous modifierez les tâches cron pour l’utilisateur root. Ceci est recommandé car si vous définissez les tâches cron pour votre utilisateur, elles pourraient ne pas s’exécuter correctement, surtout si votre profil sudo nécessite une vérification de mot de passe.

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

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

Dans la commande ci-dessus, nous omettons délibérément l’argument --db car vous voudrez généralement sauvegarder toutes vos bases de données. De plus, le caractère spécial % doit être échappé pour être conforme à la syntaxe cron.

En fonction de la taille de vos bases de données MongoDB, vous risquez bientôt de manquer d’espace disque avec trop de sauvegardes. C’est pourquoi il est également recommandé de nettoyer régulièrement les anciennes sauvegardes ou de les compresser.

Par exemple, pour supprimer toutes les sauvegardes plus anciennes que sept jours, vous pouvez utiliser la commande bash suivante :

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

Similairement à la commande mongodump précédente, vous pouvez également ajouter ceci en tant que tâche cron. Elle devrait s’exécuter juste avant de commencer la prochaine sauvegarde ; pour la tâche de 03:03 AM, cette suppression s’exécutera à 03:01 AM. Ouvrez à nouveau crontab :

  1. sudo crontab -e

Insérez la ligne suivante :

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

Enregistrez et fermez le fichier.

En accomplissant toutes les tâches de cette étape, vous assurerez une solution de sauvegarde appropriée pour vos bases de données MongoDB. Ensuite, vous restaurerez la base de données.

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

Lorsque vous restaurez votre base de données MongoDB à partir d’une sauvegarde précédente, vous disposez de la copie exacte de vos informations MongoDB prises à un moment donné, y compris tous les index et types de données, ce qui est particulièrement utile lorsque vous souhaitez migrer vos bases de données MongoDB. Pour restaurer MongoDB, nous utiliserons la commande mongorestore, qui fonctionne avec les sauvegardes binaires produites par mongodump.

Poursuivons nos exemples avec la base de données newdb et voyons comment nous pouvons la restaurer à partir de la sauvegarde précédemment prise. Nous spécifierons d’abord le nom de la base de données avec l’argument --nsInclude. Nous utiliserons newdb.* pour restaurer toutes les collections. Pour restaurer une seule collection comme restaurants, utilisez newdb.restaurants à la place.

Ensuite, en utilisant --drop, nous nous assurerons que la base de données cible est d’abord supprimée afin que la sauvegarde soit restaurée dans une base de données propre. Comme dernier argument, nous spécifierons le répertoire de la dernière sauvegarde, qui ressemblera à ceci : /var/backups/mongobackups/10-29-20/newdb/.

Une fois que vous avez une sauvegarde horodatée, vous pouvez la restaurer en utilisant cette commande (en mettant à jour la date pour correspondre à la vôtre) :

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

Vous verrez une sortie comme ceci :

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 restaurons les données sur le même serveur où nous avons créé la sauvegarde. Si vous souhaitez migrer les données vers un autre serveur et utiliser la même technique, vous devez copier le répertoire de sauvegarde, qui est /var/backups/mongobackups/10-29-20/newdb/ dans notre cas, vers l’autre serveur.

Conclusion

Vous avez maintenant effectué certaines 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 fonctionner sans une stratégie de sauvegarde fiable, comme celle décrite ici.

Vous pouvez trouver plus de tutoriels sur la configuration et l’utilisation de MongoDB dans ces articles de la communauté DigitalOcean. Nous vous encourageons également à consulter la documentation officielle de MongoDB, car c’est une excellente ressource sur les possibilités offertes par MongoDB.

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