3.6 KiB
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.
- 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