Restaurar una base de datos en un contenedor con mariadb o mysql

Tengo un contenedor con varios esquemas y me sucede con frecuencia que tengo que restaurar copias de producción en local para hacer pruebas o mejoras.

Restaurar una base de datos en un contenedor con mariadb o mysql

Pasos:

  • Obtengo un backup de producción
  • Lo muevo a una carpeta con permisos de lectura
  • Ejecuto el comando docker cp
  • Me conecto al contenedor de mariadb
  • Ejecuto la sentencia de restauración

Obtener backup:

mysqldump --no-tablespaces --host=<el.nombre-o-ip.del.servidor> --user=<nombre-usuario> --password="<contraseña>" <nombre-de-la-bd> > <ruta-archivo-dump.sql> -- algo así: mysqldump --no-tablespaces --host=localhost.wix.com --user=userwix33 --password="$$12*@347--+abXx" db_wixweb > $HOME/out/backups/mi-backup.sql -- de alguna forma descargo el backup de wix usando ftp, ssh, api, etc

Carpeta con permisos de lectura unicamente:

Tengo una carpeta temporal exclusivamente para estos dumps: $HOME/dockercfg/db_dumps luego termino teniendo esta ruta en mi sistema local.
$HOME/dockercfg/db_dumps/mi-backup.sql


Comando docker cp:

cd $HOME/dockercfg/db_dumps; docker cp $HOME/dockercfg/db_dumps/mi-backup.sql cont-mariadb-univ:/tmp/mi-backup.sql

En este punto ya tengo el backup dentro del contenedor. El siguiente paso es conectarme.

docker exec -it --user root cont-mariadb-univ bash

Ejecuto el restore:

Ya dentro del contenedor... dbloc_wixweb puede ser el nombre que desees yo uso ese prefijo dbloc.
Antes de restaurar reemplazo las primeras lineas con el siguiente código:

DROP DATABASE IF EXISTS `nombre_de_bd`; CREATE DATABASE IF NOT EXISTS `nombre_de_bd` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE `nombre_de_bd`; -- resto de sentencias root@host-maria-univ:/$ mysql --host=localhost --user=root --password=abcd dbloc_wixweb < /tmp/mi-backup.sql

Como información extra dejo la configuración del Dockerfile y docker-compose.yml relacionados con el contenedor

Dockerfile:
FROM mariadb RUN apt-get update RUN apt-get install -y iputils-ping
docker-compose.yml
version: "3.3" services: service-db: build: ./mariadb/ container_name: cont-mariadb-univ hostname: host-maria-univ environment: # .env.DB_USER MYSQL_USER: ${DB_USER} # .env.DB_PASSWORD MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} volumes: - ${DB_FOLDER}/initdb:/docker-entrypoint-initdb.d/ - ${DB_FOLDER}/mysql:/var/lib/mysql ports: - "3306:3306" command: 'mysqld --innodb-flush-method=fsync' networks: - net networks: net:

Autor: Eduardo A. F.
Publicado: 27-03-2021 21:27
Actualizado: 28-03-2021 21:05