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

MongoDB est l’un des moteurs de base de données NoSQL les plus populaires. Il est réputé pour être évolutif, puissant, fiable et facile à utiliser. Dans cet article, nous allons vous montrer comment sauvegarder, restaurer et migrer vos bases de données MongoDB.

Importer et exporter une base de données signifie gérer les données dans un format lisible par l’homme, compatible avec d’autres produits logiciels. En revanche, les opérations de sauvegarde et de restauration créent ou utilisent des données binaires spécifiques à MongoDB, qui préservent non seulement la cohérence et l’intégrité de vos données, mais également ses attributs MongoDB spécifiques. 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.

Conditions préalables

Avant de suivre ce didacticiel, assurez-vous de remplir les conditions préalables suivantes:

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.

Comprendre les bases

Avant de poursuivre plus avant avec cet article, une compréhension de base de la question est nécessaire. Si vous avez de l’expérience avec les systèmes de base de données relationnels populaires tels que MySQL, vous pouvez trouver certaines similitudes lorsque vous utilisez MongoDB.

La première chose à savoir est que MongoDB utilise les formats json et bson (binary json) pour stocker ses informations. Json est le format lisible par l’homme, parfait pour exporter et, éventuellement, importer vos données. Vous pouvez en outre 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:

Exemple de format json

{"address":[
   {"building":"1007", "street":"Park Ave"},
   {"building":"1008", "street":"New Ave"},
]}

Json est très 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 soi-disant "perte de fidélité" de l’information si vous utilisez JSON. Pour la sauvegarde et la restauration, il vaut mieux utiliser le bson binaire.

Deuxièmement, vous n’avez pas à vous préoccuper de la création explicite d’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, c’est le cas de la structure des collections (bases de données). Contrairement à d’autres moteurs de base de données, dans MongoDB, la structure est à nouveau automatiquement créée lors de l’insertion du premier document (ligne de la base de données).

Troisièmement, dans MongoDB, lire ou insérer de grandes quantités de données, par exemple pour les tâches de cet article, peut nécessiter beaucoup de ressources et consomme une grande partie du processeur, de la mémoire et de l’espace disque. Il s’agit là d’un point critique étant donné que MongoDB est fréquemment utilisé pour les bases de données volumineuses et les Big Data. La solution la plus simple à ce problème consiste à exécuter les exportations et les sauvegardes pendant la nuit ou en dehors des heures de pointe.

Quatrièmement, la cohérence des informations peut être problématique si vous avez un serveur MongoDB occupé où les informations changent pendant le processus d’exportation ou de sauvegarde de la base de données. Il n’y a pas de solution simple à ce problème, mais à la fin de cet article, vous verrez des recommandations pour en savoir plus sur la réplication.

Alors que vous pouvez utiliser les import et fonctions d’exportation pour sauvegarder et restaurez vos données, il existe de meilleurs moyens d’assurer l’intégrité complète de vos bases de données MongoDB. Pour sauvegarder vos données, utilisez la commande + mongodump +. Pour restaurer, utilisez + mongorestore +. Voyons comment ils fonctionnent.

Sauvegarde d’une base de données MongoDB

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

Un argument important 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 second argument important est + - out + qui spécifie le répertoire dans lequel les données seront sauvegardées. Prenons un exemple avec la sauvegarde de la base de données + newdb + et son stockage dans le répertoire + / var / backups / mongobackups +. Idéalement, nous aurons chacune de nos sauvegardes dans un répertoire avec la date actuelle telle que + / var / backups / mongobackups / 01-20-16 + (20 janvier 2016). Commençons par créer ce répertoire + / var / backups / mongobackups + avec la commande:

sudo mkdir /var/backups/mongobackups

Ensuite, notre commande de sauvegarde devrait ressembler à ceci:

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

Une sauvegarde exécutée avec succès aura une sortie telle que:

Sortie de mongodump

2016-01-20T10:11:57.685-0500    writing newdb.restaurants to /var/backups/mongobackups/01-20-16/newdb/restaurants.bson
2016-01-20T10:11:57.907-0500    writing newdb.restaurants metadata to /var/backups/mongobackups/01-20-16/newdb/restaurants.metadata.json
2016-01-20T10:11:57.911-0500    done dumping newdb.restaurants (25359 documents)
2016-01-20T10:11:57.911-0500    writing newdb.system.indexes to /var/backups/mongobackups/01-20-16/newdb/system.indexes.bson

Notez que dans le chemin de répertoire ci-dessus, nous avons utilisé + date +"% m-% d-% y "+ qui obtient automatiquement la date du jour. Cela nous permettra d’avoir les sauvegardes dans le répertoire + / var / backups // +. Ceci est particulièrement pratique lorsque nous automatisons les sauvegardes.

À ce stade, vous avez une sauvegarde complète de la base de données + newdb + dans le répertoire + / var / backups / mongobackups // newdb / +. Cette sauvegarde a tout pour restaurer correctement le + newdb + et préserver sa soi-disant «fidélité».

En règle générale, vous devez effectuer des sauvegardes régulières, par exemple, tous les jours et, de préférence, à un moment où le serveur est le moins chargé. Ainsi, vous pouvez définir la commande + mongodump + en tant que tâche cron afin qu’elle soit exécutée régulièrement, par exemple. tous les jours à 03h03. Pour accomplir cette crontab ouverte, l’éditeur de cron aime ceci:

sudo crontab -e

Notez que lorsque vous exécuterez + sudo crontab +, vous modifierez les travaux cron pour l’utilisateur root. Ceci est recommandé car, si vous définissez les crons pour votre utilisateur, ils risquent de ne pas être exécutés correctement, notamment si votre profil sudo nécessite une vérification du mot de passe.

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

Fenêtre crontab

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

Dans la commande ci-dessus, nous omettons volontairement l’argument + - db + car vous souhaiterez généralement que toutes vos bases de données soient sauvegardées.

En fonction de la taille de votre base de données MongoDB, il est possible que vous manquiez rapidement d’espace disque avec trop de sauvegardes. C’est pourquoi il est également recommandé de nettoyer les anciennes sauvegardes régulièrement ou de les compresser. Par exemple, pour supprimer toutes les sauvegardes de plus de 7 jours, vous pouvez utiliser la commande bash suivante:

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

De la même manière que la commande + mongodump + précédente, celle-ci peut également être ajoutée en tant que tâche cron. Il doit être exécuté juste avant de lancer la prochaine sauvegarde, par exemple. à 03h01. Pour cela rouvrez crontab:

sudo crontab -e

Après cela, insérez la ligne suivante:

Fenêtre crontab

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

La réalisation de toutes les tâches de cette étape garantira une solution de sauvegarde efficace pour vos bases de données MongoDB.

Restauration et migration d’une base de données MongoDB

En restaurant votre base de données MongoDB à partir d’une sauvegarde précédente (telle que celle de l’étape précédente), vous pourrez obtenir la copie exacte de vos informations MongoDB à un moment donné, y compris tous les index et types de données. Ceci 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 la sauvegarde binaire produite par + mongodump +.

Continuons nos exemples avec la base de données + newdb + et voyons comment nous pouvons le restaurer à partir de la sauvegarde précédemment prise. En tant qu’arguments, nous allons d’abord spécifier le nom de la base de données avec l’argument + - db +. Ensuite, avec + - 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 vierge. En dernier argument, nous spécifierons le répertoire de la dernière sauvegarde + / var / backups / mongobackups // newdb / +. Ainsi, toute la commande ressemblera à ceci (remplacez par la date de la sauvegarde que vous souhaitez restaurer):

sudo mongorestore --db newdb --drop /var/backups/mongobackups//newdb/

Une exécution réussie affichera la sortie suivante:

Sortie de mongore

2016-01-20T10:44:47.876-0500    building a list of collections to restore from /var/backups/mongobackups/01-20-16/newdb/ dir
2016-01-20T10:44:47.908-0500    reading metadata file from /var/backups/mongobackups/01-20-16/newdb/restaurants.metadata.json
2016-01-20T10:44:47.909-0500    restoring newdb.restaurants from file /var/backups/mongobackups/01-20-16/newdb/restaurants.bson
2016-01-20T10:44:48.591-0500    restoring indexes for collection newdb.restaurants from metadata
2016-01-20T10:44:48.592-0500    finished restoring newdb.restaurants (25359 documents)
2016-01-20T10:44:48.592-0500    done

Dans le cas ci-dessus, nous restaurons les données sur le même serveur que celui où la sauvegarde a été créée. Si vous souhaitez migrer les données vers un autre serveur et utiliser la même technique, il vous suffit de copier le répertoire de sauvegarde, qui est + / var / backups / mongobackups // newdb / + dans notre cas, vers l’autre serveur.

Conclusion

Cet article vous a présenté l’essentiel de la gestion de vos données MongoDB en termes de sauvegarde, de restauration et de migration de bases de données. Vous pouvez continuer à lire sur Comment configurer une base de données MongoDB évolutive dans laquelle la réplication MongoDB est expliqué.

La réplication est non seulement utile pour l’évolutivité, mais également pour les rubriques actuelles. La réplication vous permet de continuer à exécuter votre service MongoDB sans interruption à partir d’un serveur MongoDB esclave pendant que vous restaurez le serveur principal après une panne. Une partie de la réplication est également le operations log (oplog), qui enregistre toutes les opérations qui modifient vos données. Vous pouvez utiliser ce journal, comme vous le feriez avec le journal binaire dans MySQL, pour restaurer vos données après la dernière sauvegarde. Rappelez-vous que les sauvegardes ont généralement lieu pendant la nuit et que, si vous décidez de restaurer une sauvegarde le soir, toutes les mises à jour seront manquantes depuis la dernière sauvegarde.