Skip to content

Repository files navigation

Preparación del entorno para MySQL 8 con Docker

Este README describe los pasos necesarios para preparar un entorno Docker con MySQL 8 en una VM con Ubuntu y utilizando el método de autenticación legacy (solo contraseña, sin SSL/RSA/Tunelización SSH) para development sencillo, incluyendo instalación de Docker, permisos, firewall, ejecución de scripts y backups. El script contempla la creación de una base de datos a utilizar en desarrollo, 2 credenciales para 2 desarrolladores con privilegios de root en MySQL, y una credencial extra con acceso limitado a la base de datos creada para usar en los ajustes de conexión de tus apps. Editar para cubrir más o menos necesidades.


1. Navegar al directorio del proyecto

Antes de ejecutar cualquier comando, asegúrate de estar en el directorio donde están los archivos:

cd <ruta_del_proyecto>

Esto garantiza que los scripts deploy-legacy.sh y init-users-legacy.sh funcionen correctamente y que Docker Compose pueda encontrar el archivo docker-compose-legacy.yml.


2. Instalación de Docker en Ubuntu

Nota: el repositorio oficial de Docker no está en los repos estándar de Ubuntu.

  1. Instalar dependencias esenciales:
sudo apt update
sudo apt install -y ca-certificates curl gnupg
  1. Agregar la clave GPG de Docker:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
  1. Agregar el repositorio oficial de Docker:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" \
  | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. Actualizar la lista de paquetes:
sudo apt update
  1. Instalar Docker y el plugin de Compose:
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  1. Verificar la instalación:
docker run hello-world
docker compose version

3. Preparar permisos y firewall

  1. Dar permisos de ejecución a los scripts:
chmod +x deploy-legacy.sh
chmod +x init-users-legacy.sh
  1. Abrir el puerto 3306 en el firewall:
sudo ufw allow 3306/tcp
sudo ufw reload

Esto permite que herramientas externas se conecten al contenedor MySQL.

También es importante que se abra el puerto en los ajustes de red de tu VM. En mi caso estoy utilizando una VM de Oracle, por lo que debo ingresar a detalles de la instancia en mi dashboard de Oracle Cloud.


4. Configuración de variables de entorno

Edita el archivo .env en el directorio del proyecto con las siguientes variables:

MYSQL_DATABASE=<nombre_base_de_datos>
TZ=<Zona Horaria a usar en la BD>
MYSQL_ROOT_PASSWORD="<tu_contraseña_inicial_root>"
USER1_NAME=<desarrollador_root_1>
USER1_PASSWORD="<contraseña_desarrollador_1>"
USER2_NAME=<desarrollador_root_2>
USER2_PASSWORD="<contraseña_desarrollador_2>"
USER_FOR_API_NAME=<usuario_app>
USER_FOR_API_PASSWORD="<contraseña_usuario_app>"

Ajusta los nombres y contraseñas según tu entorno.


5. Desplegar el contenedor MySQL Legacy

  1. Bajar contenedores previos y limpiar volúmenes:
docker compose -f docker-compose-legacy.yml down -v
  1. Desplegar contenedor con Docker Compose:
./deploy-legacy.sh
  1. Verificar que el contenedor esté corriendo:
docker ps

Si el contenedor no arranca automáticamente, se puede iniciar manualmente:

docker start mysql-legacy

Nota: Si el contenedor se detiene luego de hacer el deploy, es porque sucedió algún error en las sentencias SQL del script init-users-legacy.sh.


6. Uso de MySQL desde contenedor

  • Ingresar como root desde bash del contenedor:
docker exec -it mysql-legacy bash
mysql -uroot -p
  • Ingresar como usuario normal:
mysql -u<tu_usuario> -p

7. Backup de la base de datos

Para realizar un backup de la base de datos <tu_base> desde el contenedor:

docker exec mysql-legacy /usr/bin/mysqldump -u<usuario> -p<contraseña> <tu_base> > backup.sql

Ejemplo usando root:

docker exec mysql-legacy /usr/bin/mysqldump -uroot -p<MYSQL_ROOT_PASSWORD> <tu_base> > backup.sql

Esto genera un archivo backup.sql en la máquina host con todo el contenido de la base de datos.

Para restaurar desde un archivo backup.sql:

docker exec -i mysql-legacy /usr/bin/mysql -uroot -p<MYSQL_ROOT_PASSWORD> <tu_base> < backup.sql

8. Notas finales

  • Si utilizas contraseñas con caracteres especiales, asegúrate de envolverlas entre comillas en .env o dentro de los scripts.
  • Los scripts init-users-legacy.sh y deploy-legacy.sh deben ejecutarse después de configurar el firewall y las variables de entorno.
  • Para cualquier cambio en usuarios de MySQL, puedes editar directamente el script init-users-legacy.sh y redeployar si es necesario.
  • Los archivos fuente deben estar en el formato correspondiente para el sistema en el que van a ser utilizados. En este caso, como se trata de Ubuntu, los archivos fuente tienen texto tipo UNIX. Esto es importante por cómo son interpretados los saltos de línea y otros símbolos según el sistema operativo del Host.
  • Recomiendo MobaXterm para conectar con la VM, ya que tiene herramientas útiles como explorador SFTP y editor de archivos de texto donde revisar el formato de texto (UNIX/DOS/MAC) y los símbolos ocultos.

About

Levantar contenedor con MySQL8 con autenticación usando mysql_native_password y no caching_sha2_password. Ideal para desarrollo.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages