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.