Cómo hacer copias de seguridad, restaurar y migrar una base de datos MongoDB en Ubuntu 20.04

El autor seleccionó el Fondo de Ayuda COVID-19 para recibir una donación como parte del programa Write for DOnations.

Introducción

MongoDB es uno de los motores de base de datos NoSQL más populares. Es famoso por ser escalable, robusto, confiable y fácil de usar. En este artículo, realizarás copias de seguridad, restauraciones y migraciones de una muestra de base de datos MongoDB.

Importar y exportar una base de datos implica tratar con datos en un formato legible por humanos que sea compatible con otros productos de software. En contraste, las operaciones de copia de seguridad y restauración de MongoDB crean o utilizan datos binarios específicos de MongoDB, lo que preserva no solo la consistencia e integridad de tus datos, sino también sus atributos específicos de MongoDB. Por lo tanto, para la migración, suele ser preferible usar copia de seguridad y restauración siempre que los sistemas de origen y destino sean compatibles.

Prerrequisitos

Antes de seguir este tutorial, asegúrate de completar los siguientes requisitos previos:

A menos que se indique lo contrario, todos los comandos que requieren privilegios de root en este tutorial deben ejecutarse como un usuario no root con privilegios sudo.

Paso 1 — Usando JSON y BSON en MongoDB

Antes de continuar con este artículo, se requiere cierto entendimiento básico del tema. Si tienes experiencia con otros sistemas de bases de datos NoSQL como Redis, es posible que encuentres algunas similitudes al trabajar con MongoDB.

MongoDB utiliza formatos JSON y BSON (JSON binario) para almacenar su información. JSON es el formato legible por humanos perfecto para exportar y, eventualmente, importar sus datos. Puede gestionar aún más sus datos exportados con cualquier herramienta que admita JSON, incluido un editor de texto simple.

Un ejemplo de documento .json se ve así:

Example of JSON Format
{"address":[
    {"building":"1007", "street":"Park Ave"},
    {"building":"1008", "street":"New Ave"},
]}

JSON es conveniente para trabajar, pero no admite todos los tipos de datos disponibles en BSON. Esto significa que habrá una llamada ‘pérdida de fidelidad’ de la información si utiliza JSON. Para realizar copias de seguridad y restauraciones, es mejor usar BSON binario.

En segundo lugar, no tiene que preocuparse por crear explícitamente una base de datos de MongoDB. Si la base de datos que especifica para la importación aún no existe, se crea automáticamente. Incluso mejor es el caso de la estructura de las colecciones (tablas de base de datos). A diferencia de otros motores de bases de datos, en MongoDB, la estructura se crea nuevamente automáticamente al insertar el primer documento (fila de base de datos).

En tercer lugar, en MongoDB, leer o insertar grandes cantidades de datos, como las tareas de este artículo, puede ser intensivo en recursos y consumir mucha CPU, memoria y espacio en disco. Esto es crítico considerando que MongoDB se usa con frecuencia para bases de datos grandes y Big Data. La solución más simple a este problema es ejecutar las exportaciones y copias de seguridad durante la noche o en horas no pico.

Cuarto, la consistencia de la información podría ser problemática si tienes un servidor MongoDB ocupado donde la información cambia durante el proceso de exportación o copia de seguridad de la base de datos. Una posible solución para este problema es la replicación, que puedes considerar al avanzar en el tema de MongoDB.

Aunque puedes usar las funciones de importación y exportación para hacer copias de seguridad y restaurar tus datos, hay mejores formas de garantizar la integridad completa de tus bases de datos de MongoDB. Para hacer una copia de seguridad de tus datos, debes usar el comando mongodump. Para restaurar, usa mongorestore. Veamos cómo funcionan.

Paso 2 — Usando mongodump para hacer una copia de seguridad de una base de datos MongoDB

Comencemos cubriendo primero la copia de seguridad de tu base de datos MongoDB.

Un argumento esencial para mongodump es --db, que especifica el nombre de la base de datos que desea respaldar. Si no especifica un nombre de base de datos, mongodump respalda todas sus bases de datos. El segundo argumento importante es --out, que define el directorio en el que se volcarán los datos. Por ejemplo, respaldemos la base de datos newdb y la almacenamos en el directorio /var/backups/mongobackups. Idealmente, tendremos cada uno de nuestros respaldos en un directorio con la fecha actual como /var/backups/mongobackups/10-29-20.

Primero cree ese directorio /var/backups/mongobackups:

  1. sudo mkdir /var/backups/mongobackups

Luego ejecute mongodump:

  1. sudo mongodump --db newdb --out /var/backups/mongobackups/$(date +'%m-%d-%y')

Verás una salida como esta:

Output
2020-10-29T19:22:36.886+0000 writing newdb.restaurants to 2020-10-29T19:22:36.969+0000 done dumping newdb.restaurants (25359 documents)

Tenga en cuenta que en la ruta del directorio anterior, se usó date +'%m-%d-%y' para obtener automáticamente la fecha actual. Esto le permitirá tener respaldos dentro del directorio como /var/backups/10-29-20/, lo que lo hace especialmente conveniente para automatizar respaldos.

En este punto, tiene un respaldo completo de la base de datos newdb en el directorio /var/backups/mongobackups/10-29-20/newdb/. Este respaldo tiene todo para restaurar adecuadamente la newdb y preservar su llamada “fidelidad”.

Como regla general, debe hacer respaldos regulares, preferiblemente cuando el servidor esté menos cargado. De esta manera, puede configurar el comando mongodump como un trabajo cron para que se ejecute regularmente, como todos los días a las 03:03 AM.

Para lograr esto, abra crontab, el editor de cron:

  1. sudo crontab -e

Cuando ejecutas sudo crontab, estarás editando los trabajos cron para el usuario root. Esto se recomienda porque si configuras los crons para tu usuario, es posible que no se ejecuten correctamente, especialmente si tu perfil de sudo requiere verificación de contraseña.

Dentro del indicador de crontab, inserta el siguiente comando mongodump:

crontab
  1. 3 3 * * * mongodump --out /var/backups/mongobackups/$(date +'\%m-\%d-\%y')

En el comando anterior, omitimos el argumento --db a propósito porque normalmente querrás hacer una copia de seguridad de todas tus bases de datos. Además, el carácter especial % debe escaparse para cumplir con la sintaxis de cron.

Dependiendo del tamaño de tus bases de datos MongoDB, es posible que pronto te quedes sin espacio en disco con demasiadas copias de seguridad. Por eso también se recomienda limpiar las copias de seguridad antiguas regularmente o comprimirlas.

Por ejemplo, para eliminar todas las copias de seguridad más antiguas de siete días, puedes usar el siguiente comando bash:

  1. find /var/backups/mongobackups/ -mtime +7 -exec rm -rf {} \;

Similar al comando mongodump anterior, también puedes agregar esto como un trabajo cron. Debería ejecutarse justo antes de comenzar la siguiente copia de seguridad; para el trabajo de las 03:03 a.m., esta eliminación se ejecutará a las 03:01 a.m. Abre crontab nuevamente:

  1. sudo crontab -e

Inserta la siguiente línea:

crontab
  1. 1 3 * * * find /var/backups/mongobackups/ -mtime +7 -exec rm -rf {} \;

Guarda y cierra el archivo.

Completar todas las tareas en este paso asegurará una solución de copia de seguridad adecuada para tus bases de datos MongoDB. A continuación, restaurarás la base de datos.

Paso 3 — Usar mongorestore para Restaurar y Migrar una Base de Datos MongoDB

Cuando restauras tu base de datos MongoDB desde una copia de seguridad anterior, tienes la copia exacta de tu información de MongoDB tomada en un momento particular, incluyendo todos los índices y tipos de datos, lo cual es especialmente útil cuando deseas migrar tus bases de datos MongoDB. Para restaurar MongoDB, usaremos el comando mongorestore, que funciona con las copias binarias que produce mongodump.

Continuemos con nuestros ejemplos con la base de datos newdb y veamos cómo podemos restaurarla desde la copia de seguridad previamente realizada. Primero especificaremos el nombre de la base de datos con el argumento --nsInclude. Usaremos newdb.* para restaurar todas las colecciones. Para restaurar una única colección como restaurants, usa newdb.restaurants en su lugar.

Luego, usando --drop, nos aseguraremos de que la base de datos de destino sea eliminada primero para que la copia de seguridad se restaure en una base de datos limpia. Como argumento final, especificaremos el directorio de la última copia de seguridad, que se verá algo así: /var/backups/mongobackups/10-29-20/newdb/.

Una vez que tengas una copia de seguridad con marca de tiempo, puedes restaurarla usando este comando (actualizando la fecha para que coincida con la tuya):

  1. sudo mongorestore --db newdb --drop /var/backups/mongobackups/10-29-20/newdb/

Verás una salida como esta:

Output
2020-10-29T19:25:45.825+0000 the --db and --collection args should only be used when restoring from a BSON file. Other uses are deprecated and will not exist in the future; use --nsInclude instead 2020-10-29T19:25:45.826+0000 building a list of collections to restore from /var/backups/mongobackups/10-29-20/newdb dir 2020-10-29T19:25:45.829+0000 reading metadata for newdb.restaurants from /var/backups/mongobackups/10-29-20/newdb/restaurants.metadata.json 2020-10-29T19:25:45.834+0000 restoring newdb.restaurants from /var/backups/mongobackups/10-29-20/newdb/restaurants.bson 2020-10-29T19:25:46.130+0000 no indexes to restore 2020-10-29T19:25:46.130+0000 finished restoring newdb.restaurants (25359 documents) 2020-10-29T19:25:46.130+0000 done

En el caso anterior, estamos restaurando los datos en el mismo servidor donde creamos la copia de seguridad. Si deseas migrar los datos a otro servidor y utilizar la misma técnica, debes copiar el directorio de la copia de seguridad, que en nuestro caso es /var/backups/mongobackups/10-29-20/newdb/, en el otro servidor.

Conclusión

Ahora has realizado algunas tareas esenciales relacionadas con la copia de seguridad, restauración y migración de tus bases de datos MongoDB. Ningún servidor de producción de MongoDB debería ejecutarse sin una estrategia de copia de seguridad confiable, como la que se describe aquí.

Puedes encontrar más tutoriales sobre cómo configurar y usar MongoDB en estos artículos de la comunidad de DigitalOcean. También te animamos a consultar la documentación oficial de MongoDB, ya que es un gran recurso sobre las posibilidades que ofrece MongoDB.

Source:
https://www.digitalocean.com/community/tutorials/how-to-back-up-restore-and-migrate-a-mongodb-database-on-ubuntu-20-04