Skip to main content

MariaDB

Uno de los elementos importantes de un entorno son las bases de datos (BBDD). Es donde se almacenan los datos necesarios para que las aplicaciones puedan guardar y gestionar persistentemente en el disco.

Habitualmente, cuando creo un Docker de motor de BBDD, añado también un gestor gráfico o tipo web para agilizar la gestión de la misma. Así que en este caso he añadido phpMyAdmin.

También prefiero centralizarlo todo en un contenedor y que el resto se conecte a este, para así no duplicar las instalaciones de motores de BBDD y ser más conservador en los recursos de memoria, centralizar copias de seguridad...

---
services:
  mariadb:
    container_name: mariadb
    image: mariadb
    restart: always
    networks:
      - mariadbnet
    volumes:
     - ./mariadb:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: ${DATABASE_PWD}
              
  phpmyadmin:
    container_name: phpmyadmin
    image: phpmyadmin
    restart: always
    depends_on:
      - mariadb
    networks:
      - mariadbnet
    ports:
      - "80:80"
    environment:
      - PMA_HOST=mariadb

networks:
  mariadbnet:
    external: true

Variables

  • DATABASE_PWD: Contraseña del usuario root de la BD.

Notas

  • image: Al no indicar nada, siempre escogerá la etiqueta latest.
  • networks: Todos los contenedores que creemos a partir de ahora que necesiten conectarse a MariaDB, se han de añadir a la red mariadbnet.

Copias de seguridad

Hacer copias de seguridad es una obligación si no quieres perder tus datos. Con este script puedes hacer copias separadas por BD.

#!/bin/bash

# Eliminamos los archivos más antiguos de 20 días
find -L ./mariadb_bck -mtime +20 -type f -delete

# Realizamos copia de seguridad individual de cada BD
docker exec mariadb mariadb -u root --password="ContraseñaMolonaDeroot" --batch --skip-column-names -e 'show databases;' | grep -E -v 'information_schema|performance_schema|mysql' | while read db; do docker exec mariadb mariadb-dump -u root --password="ContraseñaMolonaDeroot" --comments --dump-date --extended-insert --routines --system=user "$db" | gzip -c --best > "./mariadb_bck/$(date +%Y%m%d%H%M%S).$db.sql.gz"; done

Para ejecutarlo hay que recordar hacerlo ejecutable (chmod u+x backup.sh) y muy recomendable añadirlo a cron para que se haga periódicamente.