MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Sauvegarder une base de données MongoDB à l'aide de mongodump

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.