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