You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
Giuliano Ignacio Poeta 183ac4c830 se mejoro el compose 2 years ago
.env.sample se mejoro el compose 2 years ago
.gitignore Se arreglo la generación del contenedor 2 years ago
README.md se cambio readme 2 years ago
backup_cron.sh.example se cambio readme 2 years ago
compose.yaml se mejoro el compose 2 years ago

README.md

MySQL Database Container

Dependencias

  • Docker (Apéndice)

Configuración

cp .env.example .env
nano .env

Iniciar

docker compose up -d prod

Quitando la opción -d se ven los logs del contenedor.

Detener

# 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

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

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

# 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.

# 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

# 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.

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