Cómo realizar copias de seguridad, restaurar y migrar una base de datos MongoDB en Ubuntu 18.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 bases de datos NoSQL más populares. Es famoso por ser escalable, sólido, confiable y fácil de usar. En este artículo, realizará copias de seguridad, restaurará y migrará una base de datos MongoDB de muestra.
Importar y exportar una base de datos implica trabajar con datos en un formato legible para humanos que sea compatible con otros productos de software. Por el contrario, 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 coherencia e integridad de los datos, sino también sus atributos específicos de MongoDB. Por lo tanto, para la migración, suele ser preferible utilizar la copia de seguridad y la restauración siempre que los sistemas de origen y destino sean compatibles.
Prerrequisitos
Antes de seguir este tutorial, asegúrese de completar los siguientes requisitos previos:
- Un Droplet de Ubuntu 18.04 configurado según la guía de configuración inicial del servidor de Ubuntu 18.04 , incluido un usuario sudo no root y un firewall.
- MongoDB instalado y configurado usando el artículo Cómo instalar MongoDB en Ubuntu 18.04 .
- Ejemplo de base de datos MongoDB importada siguiendo las instrucciones de Cómo importar y exportar una base de datos MongoDB .
Salvo 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 de sudo.
Paso 1: Uso de JSON y BSON en MongoDB
Antes de continuar con este artículo, es necesario tener algunos conocimientos básicos sobre el tema. Si tiene experiencia con otros sistemas de bases de datos NoSQL, como Redis, es posible que encuentre algunas similitudes al trabajar con MongoDB.
MongoDB utiliza los formatos JSON y BSON (JSON binario) para almacenar su información. JSON es el formato legible por humanos que resulta perfecto para exportar y, eventualmente, importar sus datos. Puede administrar 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í:
Ejemplo de formato JSON
{"address":[ {"building":"1007", "street":"Park Ave"}, {"building":"1008", "street":"New Ave"},]}
Es conveniente trabajar con JSON, pero no admite todos los tipos de datos disponibles en BSON. Esto significa que se producirá la denominada “pérdida de fidelidad” de la información si se utiliza JSON. Para realizar copias de seguridad y restaurar, es mejor utilizar el formato binario BSON.
En segundo lugar, no tiene que preocuparse por crear explícitamente una base de datos MongoDB. Si la base de datos que especifica para la importación aún no existe, se crea automáticamente. El caso de la estructura de las colecciones (tablas de bases de datos) es aún mejor. A diferencia de otros motores de bases de datos, en MongoDB, la estructura se crea automáticamente al insertar el primer documento (fila de la base de datos).
En tercer lugar, en MongoDB, leer o insertar grandes cantidades de datos, como las tareas de este artículo, puede consumir muchos recursos y gran parte de la CPU, la memoria y el espacio en disco. Esto es fundamental teniendo en cuenta que MongoDB se utiliza con frecuencia para bases de datos grandes y Big Data. La solución más sencilla a este problema es ejecutar las exportaciones y las copias de seguridad durante la noche o en horas de menor actividad.
En cuarto lugar, la coherencia de la información puede ser problemática si tienes un servidor MongoDB muy 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 cuando avances en el tema de MongoDB.
Si bien puede utilizar las funciones de importación y exportación para realizar copias de seguridad y restaurar sus datos, existen mejores formas de garantizar la integridad total de sus bases de datos MongoDB. Para realizar copias de seguridad de sus datos, debe utilizar el comando mongodump
. Para restaurar, utilice mongorestore
. Veamos cómo funcionan.
Paso 2: Cómo utilizar mongodumppara realizar una copia de seguridad de una base de datos MongoDB
Primero, abordaremos la copia de seguridad de su base de datos MongoDB.
Un argumento esencial para mongodump
es --db
, que especifica el nombre de la base de datos de la que desea realizar una copia de seguridad. Si no especifica un nombre de base de datos, mongodump
realiza una copia de seguridad de 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, hagamos una copia de seguridad de la newdb
base de datos y la almacenemos en el /var/backups/mongobackups
directorio. Lo ideal sería que cada una de nuestras copias de seguridad esté en un directorio con la fecha actual, como /var/backups/mongobackups/10-29-20
.
Primero crea ese directorio /var/backups/mongobackups
:
- sudo mkdir /var/backups/mongobackups
Luego ejecuta mongodump
:
- sudo mongodump --db newdb --out /var/backups/mongobackups/`date +"%m-%d-%y"`
Verás un resultado como este:
Output2020-10-29T19:22:36.886+0000 writing newdb.restaurants to2020-10-29T19:22:36.969+0000 done dumping newdb.restaurants (25359 documents)
Tenga en cuenta que en la ruta del directorio anterior, hemos utilizado date +"%m-%d-%y"
que obtiene automáticamente la fecha actual. Esto nos permitirá tener copias de seguridad dentro del directorio como . Esto es especialmente conveniente cuando automatizamos las copias de seguridad./var/backups/10-29-20/
En este punto, ya tienes una copia de seguridad completa de la newdb
base de datos en el directorio . Esta copia de seguridad tiene todo lo necesario para restaurarla correctamente y conservar su denominada “fidelidad”./var/backups/mongobackups/10-29-20/newdb/
newdb
Como regla general, se recomienda realizar copias de seguridad con regularidad y preferiblemente cuando el servidor esté menos cargado. Por lo tanto, se puede configurar el mongodump
comando como un trabajo cron para que se ejecute con regularidad, por ejemplo, todos los días a las 03:03 AM.
Para lograr esto, abra crontab, el editor de cron:
- sudo crontab -e
Tenga en cuenta que, cuando ejecute sudo crontab
, estará editando los trabajos cron para el usuario root. Esto es recomendable porque, si configura los crons para su usuario, es posible que no se ejecuten correctamente, especialmente si su perfil sudo requiere verificación de contraseña.
Dentro del indicador de crontab, inserte el siguiente mongodump
comando:
crontab
3 3 * * * mongodump --out /var/backups/mongobackups/`date +"%m-%d-%y"`
En el comando anterior, omitimos el --db
argumento a propósito porque normalmente querrá tener una copia de seguridad de todas sus bases de datos.
Dependiendo del tamaño de su base de datos MongoDB, es posible que pronto se quede sin espacio en disco si tiene demasiadas copias de seguridad. Por eso también se recomienda limpiar las copias de seguridad antiguas con regularidad o comprimirlas.
Por ejemplo, para eliminar todas las copias de seguridad con más de siete días de antigüedad, puede utilizar el siguiente comando bash:
- find /var/backups/mongobackups/ -mtime +7 -exec rm -rf {} ;
De manera similar al mongodump
comando anterior, también puede agregarlo como un trabajo cron. Debería ejecutarse justo antes de iniciar la siguiente copia de seguridad, por ejemplo, a las 03:01 a. m. Para ello, abra crontab nuevamente:
- sudo crontab -e
Después de esto inserte la siguiente línea:
crontab
3 1 * * * find /var/backups/mongobackups/ -mtime +7 -exec rm -rf {} ;
guardar y cerrar el archivo.
Completar todas las tareas en este paso garantizará una solución de respaldo adecuada para sus bases de datos MongoDB.
Paso 3: Cómo utilizar mongorestorepara restaurar y migrar una base de datos MongoDB
Cuando restaura su base de datos MongoDB a partir de una copia de seguridad anterior, obtiene una copia exacta de la información de MongoDB tomada en un momento determinado, incluidos todos los índices y tipos de datos. Esto es especialmente útil cuando desea migrar sus bases de datos MongoDB. Para restaurar MongoDB, usaremos el comando mongorestore
, que funciona con las copias de seguridad binarias que mongodump
produce.
Continuemos con nuestros ejemplos con la newdb
base de datos y restauremosla a partir de la copia de seguridad realizada anteriormente. Como argumentos, primero especificaremos el nombre de la base de datos con el --db
argumento . Luego, con --drop
, nos aseguraremos de que la base de datos de destino se elimine 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á así: ./var/backups/mongobackups/10-29-20/newdb/
Una vez que tenga una copia de seguridad con marca de tiempo, puede restaurarla usando este comando:
- sudo mongorestore --db newdb --drop /var/backups/mongobackups/10-29-20/newdb/
Verás un resultado como este:
Output2020-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 instead2020-10-29T19:25:45.826+0000 building a list of collections to restore from /var/backups/mongobackups/10-29-20/newdb dir2020-10-29T19:25:45.829+0000 reading metadata for newdb.restaurants from /var/backups/mongobackups/10-29-20/newdb/restaurants.metadata.json2020-10-29T19:25:45.834+0000 restoring newdb.restaurants from /var/backups/mongobackups/10-29-20/newdb/restaurants.bson2020-10-29T19:25:46.130+0000 no indexes to restore2020-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 desea migrar los datos a otro servidor y utilizar la misma técnica, deberá copiar el directorio de la copia de seguridad, que en nuestro caso está en el otro servidor./var/backups/mongobackups/10-29-20/newdb/
Conclusión
Ya ha realizado algunas tareas esenciales relacionadas con la copia de seguridad, la restauración y la migración de sus bases de datos MongoDB. Ningún servidor MongoDB de producción debería funcionar sin una estrategia de copia de seguridad confiable, como la que se describe aquí.
Deja una respuesta