sql >> Base de Datos >  >> NoSQL >> MongoDB

Copia de seguridad de una base de datos MongoDB usando mongodump

Hay varias formas de hacer una copia de seguridad de una base de datos en MongoDB. Una forma rápida de hacer una copia de seguridad de una base de datos es usar mongodump herramienta.

mongodump lee datos de una base de datos MongoDB y crea archivos BSON de alta fidelidad que mongorestore utilidad puede usar para restaurar una base de datos MongoDB.

Con mongodump , puede hacer una copia de seguridad de una colección, una base de datos o todas las bases de datos.

Buscar herramientas de base de datos MongoDB

mongodump es parte del paquete de herramientas de base de datos de MongoDB. Las herramientas de base de datos de MongoDB son un conjunto de utilidades de línea de comandos para trabajar con MongoDB.

Puede o no tener MongoDB Database Tools/mongodump instalado. Intente ejecutar el siguiente comando en su Terminal o Símbolo del sistema para verificar:

mongodump --version

Si no lo tiene, puede usar las instrucciones de instalación en el sitio web de MongoDB para instalarlo en su sistema.

¿Dónde ejecutar los comandos?

Necesitas ejecutar mongodump comandos desde la línea de comandos de su sistema (por ejemplo, una nueva ventana de terminal o símbolo del sistema).

No los ejecutes desde mongo cáscara.

Copia de seguridad de todas las bases de datos

Para hacer una copia de seguridad de todas las bases de datos y colecciones en la instancia local que se ejecuta en el puerto predeterminado 27017, use mongodump comando sin argumentos.

mongodump

Ejecutar el código anterior vuelca todas las bases de datos a una carpeta llamada dump/ .

Tenga en cuenta que excluye el local y config bases de datos.

También tenga en cuenta que mongodump solo captura los documentos en la base de datos. Cuando haces una restauración, mongorestore o mongod debe reconstruir los índices después de restaurar los datos.

Así es como se ven los archivos en el dump/ carpeta.

tree dump

Resultado:

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

Esos archivos son obviamente específicos de mi instalación de MongoDB, que contiene bases de datos de prueba. En mi caso, se volcaron 3 bases de datos:PetHotel , admin y krankykranes .

Copia de seguridad en una ubicación específica

Puedes usar --out o -o para especificar una ubicación para colocar los archivos de las bases de datos volcadas.

Ejemplo:

mongodump --out=data/backups/

O:

mongodump -o=data/backups/

En este caso, cada carpeta de base de datos se envía directamente a data/backups/ carpeta (es decir, no hay /dump/ carpeta).

Copia de seguridad de una base de datos específica

Puede usar el --db parámetro para especificar una base de datos para respaldar.

mongodump --db=krankykranes

Esto vuelca los krankykranes base de datos al valor predeterminado dump/ carpeta.

Copia de seguridad de una colección específica

Puedes usar --collection o -c para especificar una colección para respaldar.

Ejemplo:

mongodump --db=krankykranes --collection=products

O:

mongodump --db=krankykranes -c=products

Esto vuelca los products colección al dump/krankykranes carpeta.

Excluyendo Colecciones

También puede usar --excludeCollection parámetro para especificar una colección específica para excluir de la copia de seguridad (es decir, no incluir en la copia de seguridad).

Ejemplo:

mongodump --db=PetHotel --excludeCollection=employees

Esto vuelca todas las colecciones del PetHotel base de datos excepto para los employees colección.

Para excluir más de una colección, use un --excludeCollection separado parámetro para cada colección que desea excluir.

Ejemplo:

mongodump --db=PetHotel --excludeCollection=employees --excludeCollection=students

Eso excluye a los employees y students colecciones de la copia de seguridad.

También puede usar --excludeCollectionsWithPrefix parámetro para excluir colecciones con un prefijo dado.

mongodump --db=PetHotel --excludeCollectionsWithPrefix=p

Eso vuelca todas las colecciones excepto aquellas que comienzan con la letra p .

La siguiente excluye todas las colecciones que comienzan con pet .

mongodump --db=PetHotel --excludeCollectionsWithPrefix=pet

Puede usar múltiples --excludeCollectionsWithPrefix argumentos para excluir colecciones con múltiples prefijos.

Ejemplo:

mongodump --db=PetHotel --excludeCollectionsWithPrefix=p  --excludeCollectionsWithPrefix=s

Comprimir la salida

Puede usar el --gzip parámetro para comprimir la salida.

mongodump --gzip --db=krankykranes

Esto comprime los archivos individuales.

tree dump

Resultado:

dump
└── krankykranes
    ├── employees.bson.gz
    ├── employees.metadata.json.gz
    ├── products.bson.gz
    └── products.metadata.json.gz

Podemos ver que todos los archivos tienen el .gz extensión.

Al enviar a un archivo de almacenamiento o a la transmisión de salida estándar, --gzip La opción comprime el archivo comprimido o la salida de datos a la secuencia.

Convertir vistas en colecciones

Puede usar --viewsAsCollections parámetro para exportar vistas de solo lectura como colecciones.

mongodump --db=PetHotel --viewsAsCollections

Cuando exporta una vista como una colección, mongodump produce un archivo BSON que contiene los documentos en la vista. Si usa mongorestore para restaurar el archivo BSON producido, la vista se restaurará como una colección.

Sin usar este argumento, mongodump exporta los metadatos de cada vista. Si incluye el archivo de metadatos de una vista en un mongorestore operación, se vuelve a crear la vista.

Usando --viewsAsCollections también omite todas las colecciones estándar. Por lo tanto, cuando ejecuto el código anterior, mi dump/ estructura de carpetas se ve así:

tree dump

Resultado:

dump
└── PetHotel
    ├── pettypes.bson
    └── pettypes.metadata.json

En mi PetHotel base de datos, tengo una vista llamada pettypes . Cuando exporto esto como una vista, solo se exportan los metadatos. Pero cuando lo convierto en una colección, un pettypes.bson se crea un archivo que no estaría allí si hubiera exportado la vista como una vista.

Esto es lo que sucede si exporto esa vista sin convertirla en una colección.

mongodump --db=PetHotel --collection=pettypes

Luego ejecute el comando de árbol para obtener la estructura de carpetas.

tree dump

Resultado:

dump
└── PetHotel
    └── pettypes.metadata.json

Entonces podemos ver que solo se vuelcan los metadatos de la vista.

Modo silencioso

Puedes usar el --quiet parámetro para limitar la salida en su terminal o ventana del símbolo del sistema.

mongodump --quiet

Sin usar esto, probablemente verá una gran lista de vistas, colecciones, etc. que están respaldadas.

Modo detallado

Por otro lado, puede usar el --verbose o -v parámetros a aumentar la salida en su terminal o en la ventana del símbolo del sistema.

mongodump --verbose

Puede aumentar la verbosidad repitiendo -v formulario varias veces.

Ejemplo:

mongodump -vvvv

Ejecutar eso en mi sistema aumentó significativamente la verbosidad.

Resultados de consulta de copia de seguridad

Puede utilizar --query o -q parámetros para volcar el resultado de una consulta.

Ejemplo:

mongodump --db=PetHotel --collection=pets --query='{ "type": "Dog" }'

Al hacer esto, rodee la consulta con comillas simples. Puede utilizar comillas dobles para los campos.

Archivos y salida estándar

Puede usar el --archive o parámetro para escribir la salida en un archivo de almacenamiento especificado o, si el archivo de almacenamiento no está especificado, en la salida estándar (stdout ) flujo para que pueda canalizar a otro proceso.

Ejemplo de salida a un archivo de almacenamiento:

mongodump --archive=PetHotel.20201230.archive --db=PetHotel

En el siguiente ejemplo, escribo en el flujo de salida estándar, luego lo canalizo a mongorestore :

mongodump --archive --db=PetHotel --collection=pets --query='{ "type": "Dog" }' | mongorestore --archive  --nsFrom='PetHotel.pets' --nsTo='PetHotel.dogs'

Eso da como resultado una nueva colección llamada dogs que aparece en el PetHotel base de datos (y la colección solo contiene documentos que tienen un type campo con un valor de dog ).

Control de acceso

Los ejemplos anteriores se realizaron en la máquina local utilizando el puerto predeterminado. Esto significó que pudimos ejecutar mongodump sin especificar cosas como --host , --port , --username , etc.

Aquí hay un ejemplo que usa esos parámetros para autenticarse como homer :

mongodump --host=myhost.example.com --port=37017 --username=homer --authenticationDatabase=admin --out=/backups/mongodump-2020-12-30

También podríamos haber usado el --password parámetro, pero no lo hicimos. Si pasa --user pero no --password , se le pedirá la contraseña.

Más información sobre mongodump

El mongodump La utilidad acepta muchos otros parámetros útiles, y también hay varios factores a considerar cuando se usa como parte de una estrategia de copia de seguridad y recuperación.

Ver el mongodump documentación en el sitio web de MongoDB para obtener más información.

Otras opciones

mongodump y mongorestore son herramientas simples y eficientes para realizar copias de seguridad y restaurar pequeñas implementaciones de MongoDB, pero no son ideales para realizar copias de seguridad de sistemas más grandes.

Consulte Métodos de copia de seguridad de MongoDB en el sitio web de MongoDB para conocer otros métodos para realizar copias de seguridad de sus bases de datos de MongoDB.