Il existe plusieurs façons de sauvegarder une base de données dans MongoDB. Un moyen rapide de sauvegarder une base de données consiste à utiliser le mongodump
outil.
mongodump
lit les données d'une base de données MongoDB et crée des fichiers BSON haute fidélité que le mongorestore
l'utilitaire peut utiliser pour restaurer une base de données MongoDB.
Avec mongodump
, vous pouvez sauvegarder une collection, une base de données ou toutes les bases de données.
Vérifiez les outils de base de données MongoDB
mongodump
fait partie du package MongoDB Database Tools. Les outils de base de données MongoDB sont une suite d'utilitaires de ligne de commande permettant de travailler avec MongoDB.
Vous pouvez ou non avoir les outils de base de données MongoDB/mongodump
installée. Essayez d'exécuter la commande suivante dans votre terminal ou invite de commande pour vérifier :
mongodump --version
Si vous ne l'avez pas, vous pouvez utiliser les instructions d'installation sur le site Web de MongoDB pour l'installer sur votre système.
Où exécuter les commandes ?
Vous devez exécuter mongodump
commandes à partir de la ligne de commande de votre système (par exemple, un nouveau terminal ou une fenêtre d'invite de commande).
Ne les exécutez pas depuis le mongo
coquille.
Sauvegarder toutes les bases de données
Pour sauvegarder toutes les bases de données et collections dans l'instance locale exécutée sur le port par défaut 27017, utilisez le mongodump
commande sans aucun argument.
mongodump
L'exécution du code ci-dessus vide toutes les bases de données dans un dossier appelé dump/
.
Notez qu'il exclut le local
et config
bases de données.
Notez également que mongodump
ne capture que les documents dans la base de données. Lorsque vous effectuez une restauration, mongorestore
ou mongod
doit reconstruire les index après la restauration des données.
Voici à quoi ressemblent les fichiers dans le dump/
dossier.
tree dump
Résultat :
dump ├── PetHotel │ ├── employees.bson │ ├── employees.metadata.json │ ├── owners.bson │ ├── owners.metadata.json │ ├── pets.bson │ ├── pets.metadata.json │ ├── pettypes.metadata.json │ ├── players.bson │ ├── players.metadata.json │ ├── scores.bson │ ├── scores.metadata.json │ ├── students.bson │ └── students.metadata.json ├── admin │ ├── system.users.bson │ ├── system.users.metadata.json │ ├── system.version.bson │ └── system.version.metadata.json └── krankykranes ├── employees.bson ├── employees.metadata.json ├── products.bson └── products.metadata.json
Ces fichiers sont évidemment spécifiques à mon installation MongoDB, qui contient des bases de données de test. Dans mon cas, 3 bases de données ont été dumpées :PetHotel
, admin
, et krankykranes
.
Sauvegarder vers un emplacement spécifique
Vous pouvez utiliser --out
ou -o
pour spécifier un emplacement où mettre les fichiers pour les bases de données vidées.
Exemple :
mongodump --out=data/backups/
Ou :
mongodump -o=data/backups/
Dans ce cas, chaque dossier de base de données est sorti directement dans le dossier data/backups/
dossier (c'est-à-dire qu'il n'y a pas de /dump/
dossier).
Sauvegarder une base de données spécifique
Vous pouvez utiliser le --db
paramètre pour spécifier une base de données à sauvegarder.
mongodump --db=krankykranes
Cela vide les krankykranes
base de données vers le dump/
par défaut dossier.
Sauvegarder une collection spécifique
Vous pouvez utiliser --collection
ou -c
pour spécifier une collection à sauvegarder.
Exemple :
mongodump --db=krankykranes --collection=products
Ou :
mongodump --db=krankykranes -c=products
Cela vide les products
collecte vers le dump/krankykranes
dossier.
Hors collections
Vous pouvez également utiliser le --excludeCollection
paramètre pour spécifier une collection spécifique à exclure de la sauvegarde (c'est-à-dire à ne pas inclure dans la sauvegarde).
Exemple :
mongodump --db=PetHotel --excludeCollection=employees
Cela vide toutes les collections du PetHotel
base de données sauf pour les employees
collecte.
Pour exclure plusieurs collections, utilisez un --excludeCollection
distinct paramètre pour chaque collection que vous souhaitez exclure.
Exemple :
mongodump --db=PetHotel --excludeCollection=employees --excludeCollection=students
Cela exclut les employees
et students
collections de la sauvegarde.
Vous pouvez également utiliser le --excludeCollectionsWithPrefix
paramètre pour exclure les collections avec un préfixe donné.
mongodump --db=PetHotel --excludeCollectionsWithPrefix=p
Cela vide toutes les collections sauf celles qui commencent par la lettre p
.
La suivante exclut toutes les collections qui commencent par pet
.
mongodump --db=PetHotel --excludeCollectionsWithPrefix=pet
Vous pouvez utiliser plusieurs --excludeCollectionsWithPrefix
arguments pour exclure les collections avec plusieurs préfixes.
Exemple :
mongodump --db=PetHotel --excludeCollectionsWithPrefix=p --excludeCollectionsWithPrefix=s
Compresser la sortie
Vous pouvez utiliser le --gzip
paramètre pour compresser la sortie.
mongodump --gzip --db=krankykranes
Cela compresse les fichiers individuels.
tree dump
Résultat :
dump
└── krankykranes
├── employees.bson.gz
├── employees.metadata.json.gz
├── products.bson.gz
└── products.metadata.json.gz
Nous pouvons voir que tous les fichiers ont le .gz
extension.
Lors de la sortie vers un fichier d'archive ou le flux de sortie standard, le --gzip
L'option compresse le fichier d'archive ou la sortie de données dans le flux.
Convertir les vues en collections
Vous pouvez utiliser le --viewsAsCollections
paramètre pour exporter les vues en lecture seule en tant que collections.
mongodump --db=PetHotel --viewsAsCollections
Lorsque vous exportez une vue en tant que collection, mongodump
produit un fichier BSON contenant les documents de la vue. Si vous utilisez mongorestore
pour restaurer le fichier BSON produit, la vue sera restaurée en tant que collection.
Sans utiliser cet argument, mongodump
exporte les métadonnées de chaque vue. Si vous incluez le fichier de métadonnées d'une vue dans un mongorestore
opération, la vue est recréée.
Utilisation de --viewsAsCollections
omet également toutes les collections standard. Par conséquent, lorsque j'exécute le code ci-dessus, mon dump/
la structure des dossiers ressemble à ceci :
tree dump
Résultat :
dump
└── PetHotel
├── pettypes.bson
└── pettypes.metadata.json
Dans mon PetHotel
base de données, j'ai une vue appelée pettypes
. Lorsque j'exporte ceci en tant que vue, seules les métadonnées sont exportées. Mais quand je le convertis en collection, un pettypes.bson
fichier est créé qui ne serait pas là si j'avais exporté la vue en tant que vue.
Voici ce qui se passe si j'exporte cette vue sans la convertir en collection.
mongodump --db=PetHotel --collection=pettypes
Exécutez ensuite la commande tree pour obtenir la structure du dossier.
tree dump
Résultat :
dump └── PetHotel └── pettypes.metadata.json
Nous pouvons donc voir que seules les métadonnées de la vue sont vidées.
Mode silencieux
Vous pouvez utiliser le --quiet
paramètre pour limiter la sortie dans votre fenêtre de terminal ou d'invite de commande.
mongodump --quiet
Sans l'utiliser, vous verrez probablement une grande liste de vues, de collections, etc. qui sont sauvegardées.
Mode détaillé
D'un autre côté, vous pouvez utiliser le --verbose
ou -v
paramètres à augmenter la sortie dans votre fenêtre de terminal ou d'invite de commande.
mongodump --verbose
Vous pouvez augmenter la verbosité en répétant le -v
former plusieurs fois.
Exemple :
mongodump -vvvv
L'exécuter sur mon système a considérablement augmenté la verbosité.
Sauvegarder les résultats de la requête
Vous pouvez utiliser le --query
ou -q
paramètres pour vider le résultat d'une requête.
Exemple :
mongodump --db=PetHotel --collection=pets --query='{ "type": "Dog" }'
Ce faisant, entourez la requête de guillemets simples. Vous pouvez utiliser des guillemets doubles pour les champs.
Archives et sortie standard
Vous pouvez utiliser le --archive
ou paramètre pour écrire la sortie dans un fichier archive spécifié ou, si le fichier archive n'est pas spécifié, dans la sortie standard (stdout
) stream afin que vous puissiez rediriger vers un autre processus.
Exemple de sortie dans un fichier d'archive :
mongodump --archive=PetHotel.20201230.archive --db=PetHotel
Dans l'exemple suivant, j'écris dans le flux de sortie standard, puis dans mongorestore
:
mongodump --archive --db=PetHotel --collection=pets --query='{ "type": "Dog" }' | mongorestore --archive --nsFrom='PetHotel.pets' --nsTo='PetHotel.dogs'
Cela se traduit par une nouvelle collection appelée dogs
apparaissant dans le PetHotel
base de données (et la collection ne contient que des documents qui ont un type
champ avec une valeur de dog
).
Contrôle d'accès
Les exemples précédents ont été réalisés sur la machine locale en utilisant le port par défaut. Cela signifie que nous avons pu exécuter mongodump
sans spécifier des choses comme --host
, --port
, --username
, etc.
Voici un exemple qui utilise ces paramètres pour s'authentifier en tant que homer
:
mongodump --host=myhost.example.com --port=37017 --username=homer --authenticationDatabase=admin --out=/backups/mongodump-2020-12-30
On aurait pu aussi utiliser le --password
paramètre, mais nous ne l'avons pas fait. Si vous passez --user
mais pas --password
, vous serez invité à entrer le mot de passe.
Plus d'informations sur mongodump
Le mongodump
accepte de nombreux autres paramètres utiles, et il existe également divers facteurs à prendre en compte lors de son utilisation dans le cadre d'une stratégie de sauvegarde et de récupération.
Voir le mongodump
documentation sur le site Web de MongoDB pour plus d'informations.
Autres options
mongodump
et mongorestore
sont des outils simples et efficaces pour sauvegarder et restaurer de petits déploiements MongoDB, mais ne sont pas idéaux pour capturer des sauvegardes de systèmes plus importants.
Voir Méthodes de sauvegarde MongoDB sur le site Web MongoDB pour d'autres méthodes de sauvegarde de vos bases de données MongoDB.