introduction
Aujourd’hui, de nombreux développeurs d’applications Web modernes choisissent d’utiliser une base de données NoSQL dans leurs projets, et MongoDB est souvent leur premier choix. Si vous utilisez MongoDB dans un scénario de production, il est important de créer régulièrement des sauvegardes afin d’éviter toute perte de données. Heureusement, MongoDB offre des outils de ligne de commande simples pour créer et utiliser des sauvegardes. Ce tutoriel expliquera comment utiliser ces outils.
Pour comprendre le fonctionnement des sauvegardes sans altérer vos bases de données existantes, ce didacticiel commence par vous guider dans la création d’une nouvelle base de données et l’ajout d’une petite quantité de données. Vous allez ensuite créer une sauvegarde de la base de données, puis la supprimer et la restaurer à l’aide de la sauvegarde.
Conditions préalables
Pour suivre, vous aurez besoin de:
-
Une Droplet Ubuntu 14.04 64 bits avec un sudo utilisateur non root
-
MongoDB 3.0.7 installé sur votre serveur, ce que vous pouvez faire en suivant https://www.digitalocean.com/community/tutorials/how-to-install-mongodb-on-ubuntu-14-04 (guide d’installation de MongoDB)]
Étape 1 - Création d’un exemple de base de données
La création d’une sauvegarde d’une base de données vide n’est pas très utile. Nous allons donc, à cette étape, créer un exemple de base de données et y ajouter des données.
Le moyen le plus simple d’interagir avec une instance de MongoDB consiste à utiliser le shell + mongo +
. Ouvrez-le avec la commande + mongo +
.
mongo
Une fois que vous avez l’invite MongoDB, créez une nouvelle base de données appelée * myDatabase * à l’aide de l’assistant + use +
.
use myDatabase
Sortie
switched to db myDatabase
Toutes les données d’une base de données MongoDB doivent appartenir à un collection. Cependant, il n’est pas nécessaire de créer explicitement une collection. Lorsque vous utilisez la méthode + insert +
pour écrire dans une collection inexistante, la collection est créée automatiquement avant l’écriture des données.
Vous pouvez utiliser le code suivant pour ajouter trois petits documents à une collection appelée * myCollection * à l’aide de la méthode + insert +
:
db.myCollection.insert([
{'name': 'Alice', 'age': 30},
{'name': 'Bill', 'age': 25},
{'name': 'Bob', 'age': 35}
]);
Si l’insertion est réussie, vous verrez un message qui ressemble à ceci:
Sortie d’une opération insert () réussie
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 3,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
Étape 2 - Vérification de la taille de la base de données
Maintenant que vous avez une base de données contenant des données, vous pouvez créer une sauvegarde pour celle-ci. Cependant, les sauvegardes seront volumineuses si vous avez une base de données volumineuse et, afin d’éviter tout risque de manque d’espace de stockage et, par conséquent, de ralentir ou de bloquer votre serveur, vous devez vérifier la taille de votre base de données avant de créer une sauvegarde.
Vous pouvez utiliser la méthode + stats +
et inspecter la valeur de la clé + dataSize +
pour connaître la taille en octets de votre base de données.
db.stats().dataSize;
Pour la base de données actuelle, la valeur de + dataSize +
sera un petit nombre:
Sortie de db.stats (). Datasize
592
Notez que la valeur de + dataSize +
n’est qu’une estimation approximative de la taille de la sauvegarde.
Étape 3 - Création d’une sauvegarde
Pour créer une sauvegarde, vous pouvez utiliser un utilitaire de ligne de commande appelé + mongodump +
. Par défaut, + mongodump +
créera une sauvegarde de toutes les bases de données présentes dans une instance de MongoDB. Pour créer une sauvegarde d’une base de données spécifique, vous devez utiliser l’option + -d +
et spécifier le nom de la base de données. De plus, pour que + mongodump +
sache où stocker la sauvegarde, vous devez utiliser l’option + -o +
et spécifier un chemin.
Si vous êtes toujours dans le shell + mongo +
, quittez-le en appuyant sur + CTRL + D +
.
Tapez la commande suivante pour créer une sauvegarde de * myDatabase * et la stocker dans + ~ / backups / first_backup +
:
mongodump -d myDatabase -o ~/backups/first_backup
Si la création de la sauvegarde réussit, vous verrez les messages de journal suivants:
Journaux de création de sauvegarde réussis
2015-11-24T18:11:58.590-0500 writing myDatabase.myCollection to /home/me/backups/first_backup/myDatabase/myCollection.bson
2015-11-24T18:11:58.591-0500 writing myDatabase.myCollection metadata to /home/me/backups/first_backup/myDatabase/myCollection.metadata.json
2015-11-24T18:11:58.592-0500 done dumping myDatabase.myCollection (3 documents)
2015-11-24T18:11:58.592-0500 writing myDatabase.system.indexes to /home/me/backups/first_backup/myDatabase/system.indexes.bson
Notez que la sauvegarde n’est pas un fichier unique. c’est en fait un répertoire qui a la structure suivante:
Structure de répertoire d’une sauvegarde MongoDB
first_backup
└── myDatabase
├── myCollection.bson
├── myCollection.metadata.json
└── system.indexes.bson
Étape 4 - Suppression de la base de données
Pour tester la sauvegarde que vous avez créée, vous pouvez utiliser une instance MongoDB s’exécutant sur un autre serveur ou supprimer la base de données sur votre serveur actuel. Dans ce tutoriel, nous allons faire le dernier.
Ouvrez le shell + mongo +
et connectez-vous à * myDatabase *.
mongo myDatabase
Supprimez la base de données en utilisant la méthode + dropDatabase +
.
db.dropDatabase();
Si la suppression réussit, le message suivant apparaît:
Sortie de dropDatabase ()
{ "dropped" : "myDatabase", "ok" : 1 }
Vous pouvez maintenant utiliser la méthode + find +
de votre collection pour voir que toutes les données que vous avez insérées précédemment ont disparu.
db.myCollection.find();
Cette commande ne produira aucune sortie car il n’ya pas de données à afficher dans la base de données.
Étape 5 - Restauration de la base de données
Pour restaurer une base de données à l’aide d’une sauvegarde créée à l’aide de + mongodump +
, vous pouvez utiliser un autre utilitaire de ligne de commande appelé + mongorestore +
. Avant de l’utiliser, quittez le shell + mongo +
en appuyant sur + CTRL + D +
.
Utiliser + mongorestore +
est très simple. Tout ce dont il a besoin est le chemin du répertoire contenant la sauvegarde. Voici comment vous pouvez restaurer votre base de données en utilisant la sauvegarde stockée dans + ~ / / backupts / first_backup +
:
mongorestore ~/backups/first_backup/
Vous verrez les messages de journal suivants si l’opération de restauration a réussi:
Journaux de restauration réussis
2015-11-24T18:27:04.250-0500 building a list of dbs and collections to restore from /home/me/backups/first_backup/ dir
2015-11-24T18:27:04.251-0500 reading metadata file from /home/me/backups/first_backup/myDatabase/myCollection.metadata.json
2015-11-24T18:27:04.252-0500 restoring myDatabase.myCollection from file /home/me/backups/first_backup/myDatabase/myCollection.bson
2015-11-24T18:27:04.309-0500 restoring indexes for collection myDatabase.myCollection from metadata
2015-11-24T18:27:04.310-0500 finished restoring myDatabase.myCollection (3 documents)
2015-11-24T18:27:04.310-0500 done
Pour examiner les données restaurées, ouvrez d’abord le shell + mongo
et connectez-vous à` + Database`.
mongo myDatabase
Ensuite, appelez la méthode + find
sur votre` + collection`.
db.myCollection.find();
Si tout s’est bien passé, vous devriez maintenant pouvoir voir toutes les données que vous avez insérées précédemment.
Sortie de find ()
{ "_id" : ObjectId("5654e76f21299039c2ba8720"), "name" : "Alice", "age" : 30 }
{ "_id" : ObjectId("5654e76f21299039c2ba8721"), "name" : "Bill", "age" : 25 }
{ "_id" : ObjectId("5654e76f21299039c2ba8722"), "name" : "Bob", "age" : 35 }
Conclusion
Dans ce tutoriel, vous avez appris à utiliser + mongodump +
et + mongorestore +
pour sauvegarder et restaurer une base de données MongoDB. Notez que la création d’une sauvegarde est une opération coûteuse et peut réduire les performances de votre instance MongoDB. Par conséquent, il est recommandé de créer vos sauvegardes uniquement pendant les heures creuses.
Pour en savoir plus sur les stratégies de sauvegarde MongoDB, vous pouvez vous référer au MongoDB 3.0 manual.