# MySQL Database Container ## Dependencias - Docker (Apéndice) ## Configuración ```bash cp .env.example .env nano .env ``` ## Iniciar ```bash docker compose up -d prod ``` Quitando la opción *-d* se ven los logs del contenedor. ## Detener ```bash # Si estan corriendo con logs visibles # detener con Ctr+C docker compose down ``` ## Database (MySQL) Toda la base de datos queda guardada en **/database/data** Para conectarse a una terminal del contenedor (sólo para debug) **CONTAINER_NAME**: está en el archivo *.env* ```bash docker container exec -it CONTAINER_NAME bash ``` ## Backups Se creó un volumen para guardar los *backups* en **/backups**. ### Realizar backup Para hacer el backup tenemos que entrar a una shell del contenedor y generar el archivo de backup en la carpeta donde esta montado el volumen. Usar los datos configurados previamente en **.env**. **CONTAINER_NAME**: está en el archivo *.env* **MYSQL_DATABASE**: está en el archivo *.env* **MYSQL_ROOT_PASSWORD**: está en el archivo *.env* ```bash docker container exec -it CONTAINER_NAME bash # DENTRO DEL CONTENEDOR mysqldump -p ${MYSQL_DATABASE} > /backups/${MYSQL_DATABASE}$(date "+%Y%m%d-%H_%M")hs.sql # MYSQL_ROOT_PASSWORD exit ``` ### Restaurar backup Para restaurar el backup tenemos que entrar a una shell del contenedor y restaurar el backup que se encuentra en el volumen montado. 1. Hay que asegurarse de tener el backup en la carpeta **/backups**. **CONTAINER_NAME**: está en el archivo *.env* **MYSQL_ROOT_PASSWORD**: está en el archivo *.env* ```bash # Descomprimo el backup cd backups sudo unzip NOMBRE_BACKUP.zip cd .. # Elimino la base datos que existe actualmente docker compose down sudo rm -rf database docker compose up -d prod # Levanto el backup docker container exec -it CONTAINER_NAME bash # DENTRO DEL CONTENEDOR mysql -p ${MYSQL_DATABASE} < /backups/NOMBRE_BACKUP.sql # MYSQL_ROOT_PASSWORD exit ``` ## Programar backups automáticos (CRON) ### Prerrequisitos En el servidor de destino tiene que estar configurado ssh para aceptar autenticación con Public Keys. ```bash # En el servidor de destino sudo nano /etc/ssh/sshd_config # Descomentar la linea que tiene: PubkeyAuthentication yes sudo systemctl restart sshd.service #------------------------------------------------------------------------------ # En el servidor de origen del backup (USUARIO ROOT) # Generar las claves del usuario que va a ejecutar el script en este equipo ssh-keygen ssh-copy-id USUARIO@SERVIDOR_DESTINO ``` ### Programar tarea ```bash # En el servidor de origen del backup cp backup_cron.sh.example backup_cron.sh # Configurar el destino. Editar la linea #DEST=usuaro@host:/path nano backup_cron.sh # Programar la tarea con cron (USUARIO ROOT) crontab -e # En cron: # Para probar un backup cada 5 minutos */5 * * * * /ruta_al_script/backup_cron.sh # Para dejar el backup 1 vez por dia 0 0 * * * /ruta_al_script/backup_cron.sh ``` ## Apéndice ## Instalación de docker en ubuntu 18.04/20.04/22.04 Fuente: [Instalación docker ubuntu](https://docs.docker.com/engine/install/ubuntu). ```bash sudo apt-get update sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin ```