Respaldar y restaurar base de datos en MongoDB

MongoDB cuenta con herramientas para respaldar y restaurar las colecciones de documentos, esta pequeña guia provee información para el uso de ellas así como ejemplos que nos ayudaran.

 

Respaldando los datos en MongoDB

Mongodump

Esta herramienta permite crear archivos binarios en BSON con el contenido de la base de datos, por defecto mongodump no permite respaldar los datos de la base local.

En modo offline: o tambien conocido como cold backup, permite hacer un respaldo de una instancia de MongoDB cuando no esta activo el servicio y actualizandose, para realizar este tipo de respaldo debemos seguir estos pasos:

1. Detenemos el servicio de MongoDB (CentOS y Fedora) ejecutamos:

service mongod stop

2. Crearemos un directorio para nuestros respaldos y nos posicionamos en el:

mkdir ~/backupmongodb
cd ~/backupmongodb/

3.  Procedemos a ejecutar el comando mongodump y respaldar todas las base de datos:

mongodump --dbpath /var/lib/mongo/

4. Procedemos a iniciar el servicio de MongoDB:

service mongod start

Todas las base de datos respaldadas se encuentran en el directorio ~/backupmongo/dump .

Sin desactivar el servicio:  permite hacer un respaldo de los datos sin desactivar o apagar la instancia de MongoDB, para ello debemos seguir los siguientes pasos:

1. Creamos un directorio para nuestros datos a respaldar:

mkdir ~/backupmongodb
cd ~/backupmongodb

2. Procemos a respaldar una base de datos en especifico, lo haremos de la siguiente forma:

mongodump --db nombre_basededato --username usuario --password xxxxxxxxx

las opciones utilizadas corresponde a --db para especificar una base de datos, --username para especificar el usuario correspondiente a la base de datos y --password correspondiente a la contraseña del usuario.

3. Revisar el directorio ~/backupmongodb/dump en el se encuentra el directorio con el nombre de nuestra base de datos.

Respaldar una coleción: a veces necesitamos respaldar una coleción de documentos, para ello ejecutaremos:

mongodump --collection nombre_delacoleccion --db nombre_basededato --username usuario --password xxxxxxxxx

Mongoexport

Esta herramienta permite exportar los datos contenidos en una instancia MongoDB en formato de salida JSON, CSV, o TSV. No se recomienda usarlo para respaldos completos.  La documentación de MongoDB advierte que debido a que esta herramienta funcionan mediante la interacción con una instancia MongoDB en ejecución puede afectar su rendimiento, también señala que mongoimport y mongoexport no preservan de forma fiable todos los tipos de datos de BSON porque es un superconjunto de JSON por lo que mongoimport y mongoexport no pueden representar datos BSON con precisión en JSON, por lo tanto los datos resultantes exportados o importados con estas herramientas pueden perder cierto grado de fidelidad. De igual forma se dara un ejemplo por si se quiere exportar los datos en formato JSON, CSV o TSV.

1. Creamos y nos tralados a un directorio para almacenar nuestros respaldos:

mkdir ~/backupmongodb
cd backupmongodb/

2. Ejecutamos mongoexport para exportar todos los documentos en una colección:

mongoexport -d nombre_basededato -c nombre_delacoleccion -u usuario -p xxxxxxxxx -o respaldo.json

Todos los documentos de la colección nombre_delacoleccion serán almacenados en el archivo respaldo.json.

También podemos realizar un respaldo de documentos que solo contengan los campos visitas y pais utilizando la opción -f y lo podemos realizar de la siguiente forma:

mongoexport -d nombre_basededato -u usuario -p xxxxxxxxx -c nombre_delacoleccion -f "visitas,paises" -o respaldo.json

Podremos realizar una consulta y respaldar el resultado obtenido, para ello ejecutamos:

mongoexport -d nombre_basededato -u usuario -p xxxxxxxxx -c nombre_delacoleccion -q '{ "campo_valor_numerico": { "$gte": 20 } }' -o respaldo_query.json

 

Restaurando los datos en MongoDB

Mongorestore

Es la herramienta que permite escribir e insertar (no actualizar) en una instancia de MongoDB los datos de los binarios creados con la herramienta mongoimport. la misma permite restaurarlos en una base de documentos ya existente o bien crear una nueva.

Restaurando un respaldo completo: Una vez que hemos obtenido el respaldo de todas las base de datos con la utilidad mongoimport, procederemos a restaurarlas en una instancia de MongoDB no ejecutada, para ello seguiremos los siguientes pasos:

1. Desactivaremos el servicio de MongoDB:

service mongod stop

2. Nos ubicamos en el directorio con los binarios respaldados y ejecutamos el comando mongoimport :

cd ~/backupmongodb
mongorestore --dbpath /var/lib/mongo dump

El ultimo parametro dump es el directorio que crea el comando mongoimport cuando efectuamos un respaldo.

3. Iniciamos la instancia en MongoDB:

service mongod start

Restaurando una base de datos en especifico: podemos restaurar una base de datos en especifico sin detener la instancia de MongoDB tan solo debemos pasarle la opción  --db , deberemos seguir estos pasos:

1. Nos ubicamos en el directorio en donde se tiene el respaldo:

cd ~/backupmongodb

2. Ejecutamos el comando mongorestore con la opción --db :

mongorestore --dbpath /var/lib/mongo --db basededatos dump/basededatos

Es de mencionar, que la opción dump/basededatos es el directorio en donde se encuentra el previo respaldo realizado.


Restaurando una base de datos remota: también se puede realizar una restauración en una base de datos remota para ello debemos seguir estos sencillos pasos:

1. Nos trasladamos al directorio en donde se encuentra el respaldo:

cd ~/backupmongodb

2.  Ejecutamos el comando mongorestore con las siguientes opciones:

mongorestore --host 192.168.100.150 --port 27017 --db basededatos --username usuariodebasededatos --password xxxxxxx --drop dump/basededatos

La opción --drop es usada para que al momento de si existieran las colecciones de documentos en la base de datos a restaurar, primero son eliminadas y luego se procede con la restauración.

Mongoimport

Esta herramienta proporciona una ruta para importar contenido desde un archivo JSON, CSV o TSV  que ha sido creado previamente por mongoexport, o con otra herramienta de exportación. Deberemos seguir los siguientes pasos:

Ubica el archivo .json y ejecutar el comando mongoimport con las siguientes opciones:

mongoimport -d basededatos -c nombre_collecion --file respaldo.json

Podremos pasarle la opción --upsert al comando mongoimport  para insertar o actualizar objetos que ya existen (basado en el _id de cada objeto).

Al momento de importar datos contenido en un arreglo JSON pueden seguir este otro tutorial de como Importar datos JSON en MongoDB.

 

Referencia:

MongoDB Manual - Backup and Recovery