¿Cómo cambiar de Postgres a MySQL utilizando Docker?
Cambiar de un motor de base de datos a otro puede parecer una tarea difícil, pero con Docker y las herramientas adecuadas, es un proceso bastante sencillo. Si estás trabajando con Time Warp M y deseas cambiar de Postgres a MySQL, solo necesitas algunos pasos clave que te detallo a continuación, asegurándote de que tu proyecto se ejecute sin problemas en MySQL.
¿Cómo configurar el servicio de MySQL?
Para empezar con MySQL, no es necesario instalarlo directamente en tu máquina. Puedes llevar a cabo todo este proceso con Docker, que te ayudará a correr MySQL en un contenedor aislado. Aquí tienes cómo configurarlo:
Configurar el contenedor de MySQL:
Debes declarar en tu archivo docker-compose que vas a tener un servicio de MySQL.
Especifica la versión que desees usar. Un estándar común es la versión 5 de MySQL.
Establece las variables de entorno necesarias, como:
MYSQL_DATABASE: nombre de la base de datos.
MYSQL_USER: nombre de usuario (por ejemplo, "root").
MYSQL_ROOT_PASSWORD: clave de acceso para root.
Conecta el puerto de MySQL (3306) para que sea accesible desde tu máquina local.
Define un volumen para asegurarte de que la persistencia de datos esté habilitada.
Añade MYSQL_data a tu archivo .gitignore para evitar subir los archivos de persistencia al repositorio.
Una vez que tienes MySQL configurado, seguramente querrás monitorear y manejar tus bases de datos sin complicaciones. Aquí es donde entra phpMyAdmin:
Configurar phpMyAdmin:
Añade un nuevo servicio en docker-compose para phpMyAdmin.
Define las variables de entorno necesarias para que phpMyAdmin pueda conectarse a MySQL.
Asegúrate de que se comunique internamente a través del puerto correcto (8080 en la máquina local, 80 en el contenedor).
services:phpmyadmin:image: phpmyadmin/phpmyadmin
environment:- PMA_HOST=mysql
- MYSQL_ROOT_PASSWORD=123456
ports:-"8080:80"depends_on:- mysql
¿Cómo solucionar problemas comunes al configurar MySQL?
Como en todos los sistemas, podría encontrarse con algunos problemas comunes durante la configuración:
Error de puerto ya en uso: Si Docker indica que el puerto 3306 ya está en uso, por otro servicio o contenedor, identifica y detén el contenedor que está utilizando ese puerto utilizando:
docker stop <container_id>
Problemas de conexión con phpMyAdmin: Asegúrate de que las variables de entorno están configuradas correctamente, recuerda que PMA_HOST debe estar en mayúsculas y correctamente señalado a mysql.
¿Cómo actualizar la configuración para MySQL en tu aplicación?
Con la infraestructura de MySQL lista, tendrás que actualizar algunos aspectos de tu aplicación para que funcione correctamente con MySQL:
Actualizar las variables de entorno: Asegúrate de que las variables en tu código fuente reflejen las configuraciones para MySQL.
Modificar el módulo de la base de datos en la aplicación:
Cambia la conexión del módulo de base de datos de Postgres a MySQL.
Verifica que todas las configuraciones (como las rutas de acceso, credenciales y puertos) están establecidas correctamente.
import{TypeOrmModule}from'@nestjs/typeorm';TypeOrmModule.forRoot({type:'mysql',host: process.env.MYSQL_HOST,port:+process.env.MYSQL_PORT,username: process.env.MYSQL_USER,password: process.env.MYSQL_ROOT_PASSWORD,database: process.env.MYSQL_DATABASE,entities:[/* tus entidades */],synchronize:true,});
Instalar el driver necesario: Al cambiar a MySQL, necesitas instalar el driver correspondiente para Node.js, normalmente mysql2.
npminstall mysql2
Probar la conexión y asegurarse de que todo funciona
Finalmente, después de realizar todos los cambios, ejecuta nuevamente tu aplicación para asegurarte de que todo funcione correctamente. Revisa tus tablas y productos en phpMyAdmin para confirmar que los datos se están almacenando finalmente en MySQL. Esto puede ser verificado realizando solicitudes CRUD desde tu aplicación y comprobando el estado de tus datos en phpMyAdmin.
Recuerda, el cambio de Postgres a MySQL no solo es una prueba de concepto, sino también una experiencia de aprendizaje que puede reforzar tus habilidades en administración de bases de datos, Docker, y desarrollo web en general. ¡Atrévete a explorar e implementar en tus proyectos!
Cambio de Postgres a MySQL en Docker para CRUD de Productos
Imagen: https://hub.docker.com/_/microsoft-mssql-server
Por alguna razon microsoft no agrego la variable de entorno para crear la base de datos por defecto. Por lo que entren con el IDE al motor y crean la base de datos my_db
Lo unico que cambiaria, es que NestJS recomienda intalar mysql2 y no mysql
Por mas que he intentado resolver este problema no he logrado que me permita ingresar al dashboard de phpmyadmin :( help
Es por un tema de red.
Docker compose crear una red de docker y dentro de ella puede resolver las ips de los contenedores por medio del nombre del servicio. Eso funciona solamente dentro de la red de docker. Intenta poner en el campo - PMA_HOST la ip local de tu equipo para que pueda ser alcanzado desde fuera de la red de docker.
Para solucionar ese error, borre la carpeta que creamos de mysql_data, me asegure de que el archivo docker-compose.yml tuviera bien la config y volví a correr la imagen
Para quienes esten siguiendo el curso en este momento
La configuracion para mysql es la siguiente
Si estan en una mac con m1 no olviden de especificar antes de la imagen de mysql la plataforma
mysql:platform: linux/x86_64
image: mysql:5
para mysql, también toca instalar typings? cual sería el comando?
Si instalas la versión 2 no es necesario los typings npm install --save typeorm mysql2
Yo he intentado hacer esto pero con MSSQL ya que esa es mi necesidad pero no me funciona :( instale npm i mssql pero ni asi ¿alguien lo ha hecho igual con mssql?
Hola yo realice la conexion con SQL server, si te sirve de algo te voy adjuntar el JSON de conexion que realice ya que veo que estas avanzado en el curso
En el modulo de database en el useFactory
useFactory:(configService:ConfigType<typeof configAPP>)=>{const{ name, port, password, server, user }= configService.databasereturn{type:'mssql',username: user,password: password,port: port,host: server,database: name,synchronize:false,autoLoadEntities:true,options:{encrypt:false}}//return new sql.ConnectionPool(config)},
Adicional a ello en el ++SQL configuration manager++
Si no te aparece utiliza esto en el run ([banderita windows] + r
SQLServerManager15.msc
Nota: recuerda usar el nombre de tus variables de configuración
Todo chévere, pero hay algo que no entiendo.
Para poder ejecutar la BBDD de MySQL también debo tener corriendo el contenedor de postgres, ¿por qué pasa esto?
De no ser así, tengo un error en la terminal sobre el puerto 5432
en mi caso para poder ver el phpmyadmin tuve que colocar el password: root porque el 123456 no funciono
ERROR:for mysql Cannot start service mysql:Ports are not available: listen tcp 0.0.0.0:3306
Iniciar el Administrador de tareas, ir a la pestaña de Servicios y detener el servicio de MySQL80. Luego volver a correr el contenedor:
docker-compose up -d mysql
docker-compose up -d phpmyadmin
Por si alguien está haciendo el curso con un Mac con chip M1 para la fecha en la que pongo este comentario todavía no está adaptado el contenedor de MySql si intentáis correrlo como el profesor os dará un error para evitar este error solo tenéis que ponerlo como este: