Cómo generar respaldos automáticos de MongoDB en Ubuntu y subirlos a AWS S3

Gustavo Gonzalez
Aug 28, 2018 · 3 min read

Uno de nuestros proyectos utiliza como base de datos MongoDB y vimos la necesidad de poder generar respaldos y subirlos a un servidor externo para protección de los mismos.

Una de las opciones es contratar un servicio de terceros que maneje la base de datos por nosotros y que por lo general incluye manejo de respaldos. Otra de las opciones es hacerlo en nuestro propio servidor, y en este artículo les explicaré el cómo hacerlo.

Requisitos

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.listsudo apt-get update
sudo apt-get install -y mongodb-org

El siguiente requisito es tener instalado el cliente de consola de AWS, de igual manera, los pasos están en la documentación de AWS. Y en breves cuentas es (sin tomar en cuenta pre-requisitos como python y/o pip):

pip install awscli --upgrade --user

Luego de tener instalado, debemos configurar el cliente de AWS, para información detalla, mira la documentación, la forma fácil es corriendo el siguiente comando:

aws configure
AWS Access Key ID [None]: KEY
AWS Secret Access Key [None]: SECRET
Default region name [None]: region
Default output format [None]: json

Ya tengo los pre-requisitos, ¿cómo genero el respaldo?

mongodump --out ~/respaldos

Para información más detallada y diferentes opciones de respaldo por favor revisa la documentación oficial

Luego de eso por facilidad podemos empaquetar la carpeta por ejemplo con tar

tar czf respaldo_db.tar.gz ~/respaldos

Y… ¿Cómo lo subo a AWS S3?

aws s3 cp respaldo.tar.gz s3://mi_bucket/respaldos_db/

Poniendo todo junto

El primer cambio es darle un nombre único al archivo de respaldo, así podemos guardar varios archivos sin reemplazar el anterior, lo fácil es basarnos en la fecha y hora actual, algo como esto hace el truco:

backup_name=~/db_backups-`date +%Y-%m-%d-%H%M`

Y luego la idea es generar un script, por facilidad se puede colocar en ~/bin

Este es un ejemplo de lo que puede contener el script:

backup_name=~/db_backups-`date +%Y-%m-%d-%H%M`
mongodump --out $backup_name
tar czf $backup_name.tar.gz $backup_name
aws s3 cp $backup_name.tar.gz s3://mi_bucket/respaldos/
rm -rf $backup_name
rm $backup_name.tar.gz

Y por último agregamos una tarea en cron para que se ejecute todos los días, para editar cron este comando nos será de utilidad:

crontab -e

En el archivo que se abre colocamos algo como lo siguiente:

0 0 * * * /bin/bash ~/bin/db-backups.sh >> ~/logs/db_backups.log 2>&1

Con eso le decimos a cron que todos los días a media noche genere un respaldo.

Para comprobarlo podemos o bien ejecutar el comando a mano:

/bin/bash ~/bin/db-backups.sh

O bien esperar al siguiente día y verificar en nuestra cuenta de Amazon Web Services que el archivo esté creado.

Como ven, el proceso es sencillo, debemos seguir algunos pasos y ya tendremos nuestros respaldos en un servicio externo. Obviamente una buena práctica es verificar que los respaldos funcionan haciendo pruebas ya sea en un ambiente local o en algún servidor para verificar que los datos se pueden restaurar y que sí nos servirán cuando tengamos una contingencia con nuestro servidor.


Si te gustó esta historia, aplaude tantas veces como quieras y para ver historias similares acerca de tecnología, mira nuestras publicaciones y escribe en los comentarios cualquier duda que tengas.

Si necesitas un equipo que te ayude a implementar tus ideas en React JS o Nativo, no dudes en avisarnos. Puedes ir a nuestro sitio web y llenar el formulario para que iniciemos el contacto.

English version

Gustavo
Mail: gustavo@alturasoluciones.com
Twitter: @Aguardientico
LinkedIn: www.linkedin.com/in/gustavoagonzalez
Blog personal: http://aguardientech.blogspot.com

AlturaSoluciones

IT consulting. #Agile and #Lean remote software development team specialized in #web, #mobile, #reactjs and #rubyonrails from #Ecuador.

Thanks to Alberto Jose Aragon Alvarez.

Gustavo Gonzalez

Written by

25+ years in software development. Loves to learn new technologies and share his knowledge with others.

AlturaSoluciones

IT consulting. #Agile and #Lean remote software development team specialized in #web, #mobile, #reactjs and #rubyonrails from #Ecuador.