Crear respaldos automáticos de BD en Docker
Tags: spanish, docker, bash
Published: 2023-10-06 19:38:31

La administración de servidores es una parte que a mi personalmente siempre me ha interesado y que he estado aprendiendo a lo largo de mi carrera profesional.

No hay mejor forma de internalizar conceptos que ejecutando y enseñando, es por ello que en este articulo vamos a revisar como se pueden automatizar respaldos de base de datos con la ayuda de Cron Job y Bash Scripting.

Lo primero que tenemos que hacer es configurar nuestro Cron Job, que es básicamente una tarea que queremos que se ejecute cada cierto tiempo.

Para esto necesitamos tener acceso a nuestro usuario todo poderoso root, en este post vamos a abordar los comandos desde un Ubuntu Server, para que lo tomes en cuenta.

Primero nos loguemos como super usuario y una vez dentro del super usuario entramos al archivo de configuración de Cron Job con el siguiente comando.


![Editor de Cronjob](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9zbqav24yw6ji4x3wq2x.png)

En este ejemplo vamos a configurar generar el respaldo todos los días a las 3 de la madrugada dentro del archivo de configuración se tiene que agregar lo siguiente.


![Configuración Cron job](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xb1mev1s56ksl4b3dh7i.png)

Acá lo que estamos configurando es lo siguiente:
m (minute): 0
h (hour): 3
dom (day of the month): *
mon (month): *
dow (day of the week): *
command: sh /root/respaldos.sh

Las opciones marcadas con * significa que todos los días de la semana, todos los meses y todos los días del mes. Las opciones las puedes cambiar de acuerdo a tus necesidades. La ultima parte es el comando que quieres que se ejecute con base a lo anterior configurado, en este caso vamos a hacer un script personalizado para que va a estar guardado dentro del home del usuario root. Se guardan las configuraciones y seguimos con la creación del archivo de Bash. Nos dirigimos al home del super usuario y creamos un archivo nuevo que se llame respaldos.sh y dentro de ese archivo vamos a poner lo siguiente:


![Configuración Bash](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/801eof9gtk9skwhub689.png)

Debemos de entender que hace cada linea y explicaré cuales son las que se deben de cambiar para que funcione a tu caso voy a ir poniendo el funcionamiento de cada linea.

1. Se genera una variable para que almacene la fecha actual en el formato de día, mes y año.

2. Se genera otra variable que contiene la ruta de donde se va a crear el archivo de respaldo que sea el resultado de Docker, para esto yo en este ejemplo le pongo sistema pero bien podrías poner el nombre de tu sistema y se concatena la fecha actual mas la extensión del archivo.

3. Como somos el super usuario no es necesario poner sudo al comando que queremos que se ejecute, por lo tanto ponemos el comando típico de respaldo de una base de datos MySQL o MariaDB cuando están dentro de un contenedor. Las letras que están en mayúsculas las debes de sustituir por tus datos. USER: Usuario de la base de datos PASSWORD: Contraseña del usuario DB_NAME: Nombre de tu base de datos a respaldar.

4. Esta línea es la interesante porque vamos a copiar el archivo de forma segura con el comando scp pero vamos a tener que hacer una configuración extra para que en vez de ocupar una contraseña normal ocupe una llave publica de SSH, en este comando tienes que sustituir algunas cosas por tus datos. USUARIO: usuario del servidor donde se va a copiar IP_PRIVADA: Regularmente se recomienda hacerlo por ip privada para mayor seguridad y no viaje a través de internet. Seguido de la ip privada va la ruta de donde se va a poner el archivo del respaldo.

5. Una vez que se termine de copiar el archivo necesitamos borrar el archivo para que no quede rastro y no ocupe espacio en el servidor.

Ahora el ultimo paso vamos a configurar las llaves SSH del usuario root que se van a ocupar para tener acceso al servidor de destino. Para eso ejecutamos el siguiente comando


![Generar SSH Keys](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jek3kvrrgalu71fhsu3a.png)

Servidor origen. Esto nos va a generar dos archivos la llave privada (id_rsa), y la llave publica (id_rsa.pub) dentro de /root/.ssh, tenemos que abrir el archivo de la llave publica (id_rsa.pub) copiar el contenido.

Servidor destino (IP_PRIVADA). Tenemos que entrar al servidor con el usuario que antes configuramos y ver si existe la carpeta .ssh en caso de que no hay que crearla y dentro de esa carpeta crear un archivo llamado authorized_keys sin extensión y dentro de ese archivo poner el contenido de la llave publica del paso anterior, para asegurarnos de que no surja ningún tipo de error hay que cambiar los permisos de la carpeta y el archivo que acabamos de crear con chmod 700 -R .ssh.

Y eso sería todo lo que debemos de hacer ya debería de funcionar nuestros respaldos automáticos todos los días a las 3 am. 

Si este articulo te gusto o aprendiste algo me ayudarías bastante compartiéndolo y siguiéndome para apoyar este proyecto. Mas contenido en mi perfil de temas técnicos.