No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Convierte tus certificados en títulos universitarios en USA

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

20 Días
1 Hrs
27 Min
49 Seg

Cambiando la base de datos a MySQL

12/27
Recursos

Aportes 72

Preguntas 25

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Increíble la ventaja que da trabajar en Docker, me haré el curso de Docker para profundizar en el tema.

Para aquellos que les tira error y el docker no es recordar que sequelize necesita las librería

npm i --save mysql2

Saludos

Si a alguno le da error solo tiene que cambiar el puerto en mysql así esto conecta el puerto 33061 de nuestro sistema operativo con el puerto 3306 del contenedor.

Este curso ha sido muy frustrante para mi. El Docker y Sequealize me han dado muchos problemas, no entiendo porqué.

SI a alguien le da algun error al intentar conectarse al contendor de mysql, les dejo la configuración con la que me sirvio, muy similar a la de la clase, con un ligero cambio (:

 mysql:
        image: mysql:5
        environment:
            - MYSQL_DATABASE=my_store
            - MYSQL_USER=
            - MYSQL_ROOT_PASSWORD=admin123
            - MYSQL_PORT=3306
        ports:
            - "3306:3306"
        volumes:
            - ./mysql_data:/var/lib/mysql


Cuando vayan a ejecutar el servidor si les da error, en la variable de entorno deben colocar el puerto 33061 para que ejecute, ya que el contenedor de docker levanta mysql con el puerto 3306 y externamente el server se levanta con el puerto 33061 como esta en la imagen anterior.

Docker for MySQL 🐬

.
✨Definición de variables de entorno.

# mysql and docker
MYSQLDATABASE=thingst
MYSQLUSER=tester
MYSQLPASSWORD=14db7d47-f442-4a90-b633-2a537c8b5c13

♻️ Adición de DB como servicio en Docker:

services:
    mysql:
        image: mysql
        restart: always
        ports:
            - 3306:3306
        environment:
            MYSQL_DATABASE: ${MYSQLDATABASE}
            MYSQL_ROOT_PASSWORD: ${MYSQLPASSWORD}
            MYSQL_USER: ${MYSQLUSER}
            MYSQL_PASSWORD: ${MYSQLPASSWORD}
        volumes:
            - ./db/mysql:/var/lib/mysql

Donde:

  • MYSQL_DATABASE. Define la base de datos con la que se trabajará.
  • MYSQL_ROOT_PASSWORD. Se define la contraseña del usuario root.
  • MYSQL_USER. Se define un usuario root con ámbito definida por MYSQL_DATABASE
  • MYSQL_PASSWORD. Se define la contraseña para el usuario MYSQL_USER.

.
🔥 Finalmente, levantamos los servicios:
docker compose --env-file src/config/.env up -d

  • --env-file se cargan las variables de entorno definidas.
  • -d se levantan las instancia en modo silencioso

.
ℹ️ Para conectarse mediante clientes, el host permitido es mediante default del contenedor 0.0.0.0:3306

Buenas!
Si les aparece en el estado de la máquina de MySQL como “Exit 1”, lo que deben hacer es eliminar, del archivo docker-compose.yml, la siguiente variable:

MYSQL_USER=root

De esta forma iniciará el sistema. (En versiones anteriores permitía agregar esa variable, ahora se toma por defecto como root si no existe).

Para andar evitando re escribir que motor de Base de datos corremos, es mejor añadir que motor es en .env y añadirlo dentro de config.js

.env

DB_ENGINE=mysql

config.js

require('dotenv').config()

const config = {
  env: process.env.NODE_ENV || 'dev',
  dbHost: 'localhost',
  dbPort: process.env.MYSQL_PORT || 3000,
  dbUser: process.env.MYSQL_USER,
  dbPassword: process.env.MYSQL_PASSWORD,
  dbName: process.env.MYSQL_DATABASE,
  dbEngine: process.env.DB_ENGINE
}

module.exports = config

Al momento de querer levantar mysql su estado se quedaba en Exit 1.
Para arreglar ese problema dentro de docker-compose.yml en el apartado de volumes lo cambié.
Antes:
./mysql_data:/var/lib/mysql
Después:
"~/mysql_data:/var/lib/mysql"
Ahora al momento de subirlo a docker si está en Up.

Si tiene una MacBook M1 y te muestra el siguiente mensaje al levantar el contener con MySQL:

ERROR: no matching manifest for linux/arm64/v8 in the manifest list entries

Agrega esta línea en el archivo docker-compose.yml:

platform: linux/amd64

Debería quedar así:

 mysql:
    image: mysql:5
    platform: linux/amd64
    environment:
      - MYSQL_DATABASE=my_store
      - MYSQL_USER=menyin
      - MYSQL_ROOT_PASSWORD=admin123
      - MYSQL_ROOT_PORT=3306
    ports:
      - 3306:3306
    volumes:
      - ./mysql_data:/var/lib/mysql
Comando Descripcion
docker-compose up -d mysql Cambiando de DDBB
docker-compose ps Verificar si ya esta corriendo
docker-compose up -d phpmyadmin Levantando phpmyadmin
npm install --save mysql2 Driver para mysql
npm run dev Correr la base de datos

Me aparecia el estado del servicio de mysql en Exit 1
solo deje el usuario vacio y me funciono

Nico te explica hasta el ; GENIO!!!
que bien que se tomo la molestia de dar otro ejemplo con mysql

Compañeros no olvidar crear la base de datos ‘my_store’ en el gestor de bd phpMyAdmin

Yo tengo instalado MySQL Workbench en mi pc, por lo que me da un error al levantar el servicio de “mysql”.
Sin embargo, hice un pequeño cambio en el puerto para que funcione.

mysql:
    image: mysql:5
    environment:
      - MYSQL_DATABASE=my_store
      - MYSQL_USER=root
      - MYSQL_ROOT_PASSWORD=admin123
      - MYSQL_PORT=3306
    ports:
      - 3307:3306
    volumes:
      - ./mysql_data:/var/lib/mysql

al puerto que escucha el servicio lo cambie de 3306 al 3307. Espero les sirva.

Tengan cuidado con los tipos de datos decimales, en postgres funcional el NUMBER(escala,no.Decimal), pero en MYSQL no funciona. Se recomienda usar el tipo NUMERIC()

hola muchachos para los que el handler no les funcionó o no les mostraba en la respuesta la sección de “errors” averigüé un poco y posiblemente se ha actualizado la manera en que se puede tener acceso a ese detalle.

es solo remplazar:

errors: err.errors

por:

errors: err.details

Hola a todos!

Es posible que el puerto este en uso, para ello en el CMD como admin podemos terminar la tarea que lo tiene en uso:

  1. Primero buscamos el ID de la tarea
netstat -aon | findstr :3306
  1. Luego terminamos la tarea (el ID es el número de la derecha)
taskkill /pid IdTASK /F

Para aquellos que les da el siguiente error: Host ‘X’ is not allowed to connect to this MySQL server, lo solucioné exponiendo el puerto, por otro lado, no es necesario el MYSQL_USER=root dado que mysql lo crea por default.

 mysql:
    image: mysql:5.7
    restart: always
    environment:
      - MYSQL_DATABASE=my_store
      - MYSQL_USER=userX
      - MYSQL_PASSWORD=useXPassword
      - MYSQL_ROOT_PASSWORD=admin123
    ports:
      - "3306:3306"
    expose:
      - "3306"
    volumes:
      - ./mysql_data:/var/lib/mysql

P.D.: las siguientes líneas se pueden omitir, únicamente las agregué para tener otro usuario MYSQL_USER=userX y MYSQL_PASSWORD=useXPassword

Veo que muchos compañeros tuvieron dificultades, esto es normal cuando empezamos una nueva tecnologia, siempre hay detalles que debemos descubrir nosotros mismos. No se rindan, con paciencia y constancia lo lograra.
Yo soy usuario de WSL2 y asi esta mi codigo docker-compose.yml:

version: "3.8"

services:
  postgres:
    image: postgres:latest
    restart: always
    container_name: my_container_db
    environment:
      POSTGRES_DB: my_store
      POSTGRES_USER: maxdn
      POSTGRES_PASSWORD: admin123
    ports:
      - 5432:5432
    volumes:
      - /postgres_data:/var/lib/postgresql/data

  pgadmin:
    image: dpage/pgadmin4
    restart: always
    environment:
      PGADMIN_DEFAULT_EMAIL: [email protected]
      PGADMIN_DEFAULT_PASSWORD: root
    ports:
      - 5050:80

  mysql:
    image: mysql
    environment:
      MYSQL_DATABASE: my_store
      MYSQL_USER: oot
      MYSQL_ROOT_PASSWORD: admin123
      MYSQL_PORT: 3306
    ports:
      - 3306:3306
    volumes:
      - /mysql_data:/var/lib/mysql

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    environment:
      MYSQL_ROOT_PASSWORD: admin123
      PMA_HOST: mysql
    ports:
      - 8080:80

Cualquier duda comentar, saludos

Hola a todos , este es un extracto de mi docker-compose.yml ```js mysql: image: mysql:5 env_file: '.env' environment: - MYSQL_DATABASE=${DB_NAME_MS} - MYSQL_USER= - MYSQL_ROOT_PASSWORD=${DB_PASSWORD_MS} - MYSQL_PORT=3306 ports: - 0.0.0.0:3306:3306 volumes: - ./mysql_data:/var/lib/mysql ``` a Nivel de puertos yo utilice 0.0.0.0:3306 , para poder acceder dese nodejs al contenedor de mysql
En mi caso esta clase, se transformo en un reto, por la cantidad de errores que me toco solucionar, me toco navegar varias noches por la internet para solucionarlos. * primer error que cometí fue el no ejecutar el comando `npm i --save mysql2` el cual se usa para instalar la librería de mysql, este fue fácil de arreglar viendo la clase nuevamente. * luego ejecute el comando `"docker-compose up -d mysql"`, en mi caso no se realizo el pull, y batalle para poder ejecutarlo eso se soluciona de manera sencilla haciendo el pull manual con el siguiente comando `docker pull mysql` * luego me paso que levante mysql en docker pero cuando ejecutaba el comando `docker-compose ps` el contenedor quedaba sin puertos, esto fue lo que mas me demoró, al no conocer ni saber de docker, para esto ejecute el comando `docker-compose up` de esta manera muestra los logs de ejecución acá me di cuenta que debía cambiar el archivos `docker-compose.yml` el log indica que el usuario con el que intentamos acceder a mysql no tiene los privilegios y que no podemos llamar directamente la contraseña de root, queda de la siguiente manera ```js mysql: image: mysql restart: always environment: - MYSQL_DATABASE=my_store - MYSQL_USER=root - MYSQL_ALLOW_EMPTY_PASSWORD - MYSQL_ROOT_PASSWORD=admin123 - MYSQL_PORT=3306 ports: - 3306:3306 volumes: - ~/mysql_data:/var/lib/mysql ```espero pueda ser útil.

Si están trabajando con algún mac con procesador M1 es necesario agregar otra llave valor en el servicio de mysql:

platform: linux/x86_64

quedaria de la siguiente forma:

mysql:
    platform: linux/x86_64
    image: mysql:5
    environment:
      - MYSQL_DATABASE=my_store
      - MYSQL_USER=nico
      - MYSQL_ROOT_PASSWORD=admin123
      - MYSQL_PORT=3306
    ports:
      - 3306:3306
    volumes:
      - ./mysql_data:/var/lib/mysql

Les comparto la configuración que me funciono para conectar con SQL Server.

const { Sequelize } = require('sequelize');

const { config } = require('./../config/config');
const setupModels = require('./../db/models');

const USER = encodeURIComponent(config.dbUser);
const PASSWORD = encodeURIComponent(config.dbPassword);
const URI = `mssql://${USER}:${PASSWORD}@${config.dbHost}:${config.dbPort}/${config.dbName}`;

const sequelize = new Sequelize(URI, {
  dialect: 'mssql',
  logging: true,
  dialectOptions: {
        options: {
            enableArithAbort: false,
            cryptoCredentialsDetails: {
                minVersion: 'TLSv1'
            }
        }
    }
});

setupModels(sequelize);
sequelize.sync();

module.exports = sequelize;

Estuvo complicada la clase, no corria ni el contenedor ni la app, para el contenedor, tome la solución de varios comentarios aqui dejando MYSQL_USER= vacío y en el port puse 3307:3306, ya para la app si se quedo ‘root’ en el .env pero cambie el DB_PORT por ‘3302’

Este tema de cambiar la fuente de las bases de datos me ha gustado muchisimo. Gracias profesor @nicobytes

No todos los tipos de de sequelize para postgres son soportados en mysql. Por si a alguien le pasa, mientras en postgres acepta el tipo array: en mysql no, así que tuve que cambiar a J

DataTypes.ARRAY(DataTypes.STRING)
por 
DataTypes.JSON

SON.

¡Hola chicos!
Para los que no les funcionan al momento de hacer

docker-compose up -d sql

Si les da error , el nuevo servicio quedaria así (O bueno este me funciono)

services:
	mysql:
    		image: mysql
   		restart: always
    		environment:
     	 		MYSQL_ROOT_PASSWORD: root
      			MYSQL_DATABASE: test_db
    		ports:
      			- "3307:3306"
    		volumes:
      			- ./mysql_data:/var/lib/mysql

Donde:
MYSQL_ROOT_PASSWORD Este es tu usuario y a la vez tu contraseña
MYSQL_DATABASE El nombre de la base de datos

Despues corren el PHPMYADMIN y funciona normal
Este es la estrategia que me funciono a mí. 💻💻💻

en mi caso deje el middleware asi

  static sqlErrorHamdler(err, req, res, next) {
    if(err instanceof ValidationError) {
      console.log(err)
      res
        .status(409)
        .json({
          statusCode: 409,
          message: err.errors.message,
          details: err.errors
        })
    }
    next(err)
  }

API REFERENCE SEQUELIZE

Aqui les dejo la doumentacion de sequelize donde pueden ver los diferentes errores que maneja sequelize.

Estuve aproximadamente 3 dias entre revizando documentacion probando distintas configuraciones y al final logre conectarme a la base de datos usando phpmyadmin, usando la siguiente configuración: `Docker-compose.yml` ```js services: postgres: image: postgres restart: always ports: - 5432:5432 environment: - POSTGRES_DB=${POSTGRES_DB_NAME} - POSTGRES_USER=${POSTGRES_USER} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} volumes: - ./postgres_db:/var/lib/postgresql/data pgadmin: image: dpage/pgadmin4 environment: - PGADMIN_DEFAULT_EMAIL=${PGADMIN_EMAIL} - PGADMIN_DEFAULT_PASSWORD=${PGADMIN_PASSWORD} ports: - 5050:80 mysql: image: mysql environment: - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} - MYSQL_DATABASE=${MYSQL_DB_NAME} - MYSQL_USER=${MYSQL_USER} - MYSQL_PASSWORD=${MYSQL_PASSWORD} restart: always ports: - "3306:3306" volumes: - ./mysql_data:/var/lib/mysql phpmyadmin: image: phpmyadmin/phpmyadmin links: - mysql environment: - PMA_HOST=mysql - PMA_PORT=3306 restart: always ports: - "8080:80" ```services:  postgres:    image: postgres    restart: always    ports:      - 5432:5432    environment:      - POSTGRES\_DB=${POSTGRES\_DB\_NAME}      - POSTGRES\_USER=${POSTGRES\_USER}      - POSTGRES\_PASSWORD=${POSTGRES\_PASSWORD}    volumes:      - ./postgres\_db:/var/lib/postgresql/data   pgadmin:    image: dpage/pgadmin4    environment:      - PGADMIN\_DEFAULT\_EMAIL=${PGADMIN\_EMAIL}      - PGADMIN\_DEFAULT\_PASSWORD=${PGADMIN\_PASSWORD}    ports:      - 5050:80   mysql:    image: mysql    environment:      - MYSQL\_ROOT\_PASSWORD=${MYSQL\_ROOT\_PASSWORD}      - MYSQL\_DATABASE=${MYSQL\_DB\_NAME}      - MYSQL\_USER=${MYSQL\_USER}      - MYSQL\_PASSWORD=${MYSQL\_PASSWORD}    restart: always    ports:      - "3306:3306"    volumes:      - ./mysql\_data:/var/lib/mysql   phpmyadmin:    image: phpmyadmin/phpmyadmin    links:      - mysql    environment:      - PMA\_HOST=mysql      - PMA\_PORT=3306    restart: always    ports:      - "8080:80" `.env` ```js # ! CONFIG APP PORT=3000 # --------------- # ! CONFIG POSTGRESQL POSTGRES_DB_NAME=my_store POSTGRES_USER=camilo POSTGRES_PASSWORD=admin123 DB_HOST=localhost DB_PORT_POSTGRES=5432 # ! CONFI PGADMIN [email protected] PGADMIN_PASSWORD=camilo # ! CONFIG MYSQL MYSQL_DB_NAME=my_store MYSQL_USER=camilo MYSQL_PASSWORD=admin123 MYSQL_ROOT_PASSWORD=root MYSQl_PORT=3306 # ! CONFIG PHPMYADMIN PHPMYADMIN_ROOT_PASSWORD=rootpassword ```# ! CONFIG APPPORT=3000# ---------------# ! CONFIG POSTGRESQLPOSTGRES\_DB\_NAME=my\_storePOSTGRES\_USER=camiloPOSTGRES\_PASSWORD=admin123DB\_HOST=localhostDB\_PORT\_POSTGRES=5432 \# ! CONFI PGADMINPGADMIN\[email protected]\_PASSWORD=camilo \# ! CONFIG MYSQLMYSQL\_DB\_NAME=my\_storeMYSQL\_USER=camiloMYSQL\_PASSWORD=admin123MYSQL\_ROOT\_PASSWORD=rootMYSQl\_PORT=3306 \# ! CONFIG PHPMYADMINPHPMYADMIN\_ROOT\_PASSWORD=rootpassword **no podia acceder con el usuario root desde phpmyadmin asi que investigando entro la siguiente solucion:** accediendo desde la consola de mysql en docker, para lograr esto ejecute el comando: `docker exec -it `your\_container\_name\_or\_id`_for_mysql bash ` ya dentro del contenedor de mysql ejecutamos el siguiente comando: `SELECT host, user FROM mysql.user;` a mi como resultado me dio lo siguiente: ![](https://static.platzi.com/media/user_upload/image-7596f6b7-661b-41b5-b5d5-9112b9b953ea.jpg)como observamos no aprace el usuario establecido en la configuracion de docker para ello ejecutamos el siguiente comando en la consola de mysql: ```js CREATE USER 'camilo'@'%' IDENTIFIED BY 'admin123'; GRANT ALL PRIVILEGES ON *.* TO 'camilo'@'%'; FLUSH PRIVILEGES; ```CREATE USER 'camilo'@'%' IDENTIFIED BY 'admin123'; GRANT ALL PRIVILEGES ON \*.\* TO 'camilo'@'%'; FLUSH PRIVILEGES; ya con ello logre iniciar en la interfaz de phpmyadmin: ![](https://static.platzi.com/media/user_upload/image-db3429a8-9a7c-4015-b945-aee9f442c4c5.jpg)
Para aquellos con Apple Silicon es posible que cuando traten de montar el contendor de MySql inicialmente les arroje un error que dice "no matching manifest". Esto es porque los mantenedores de esta versión de MySQL para docker no han cubierto aún procesadores ARM. Para "solucionarlo" pueden agregar a esta configuración del contenedor justo en la línea sobre: `image: mysql:5` Lo siguiente: `platform: linux/x86_64`
Gracias a los comentarios de la gente pude pasarme esta clase, aunque con varios problemas... Finalmente lo que resolvio para mi fue hacer los siguiente: docker-compose.yml Lo importante a destacar es el port 33061, aunque esto no fue todo... ```js mysql: image: mysql:5 environment: - MYSQL_USER=root - MYSQL_DATABASE=${DB_NAME} - MYSQL_ROOT_PASSWORD=${DB_PASSWORD} - MYSQL_PORT=${SQL_PORT} ports: - 33061:${SQL_PORT} volumes: - ./mysql_data:/var/lib/mysql phpmyadmin: image: phpmyadmin/phpmyadmin environment: - MYSQL_ROOT_PASSWORD=${DB_PASSWORD} - PMA_HOST=mysql ports: - ${SQL_ADMIN_PORT}:${REFPORT} ```En sequelize.ts tuve que ajustar el `config.dbPort` para que fuese 33061 tambien y en user tuve que ajustarlo para que quede como root tambien ```js const URI = `mysql://root:${PASSWORD}@${config.dbHost}:${config.dbPort}1/${config.dbName}` ```const URI = `mysql://root:${PASSWORD}@${config.dbHost}:${config.dbPort}1/${config.dbName}`
Si obtienen el error: \[SequelizeConnectionError]: Unknown database 'my\_store'. Es necesario crear el esquema manualmente, las tablas las genera sin problemas sequelize, los esquemas(db) no
![](https://static.platzi.com/media/user_upload/image-829ebd88-f421-4505-8737-309c235b0dfc.jpg)alguien sabe porque me da este error cuando quiero iniciar el servidor? desde phpmyadmin se conecta bien
un ejemplo de como quedaria el archivo "docker-compose"version: '3.3' services:  mysql:    image: mysql:latest    environment:      - MYSQL\_DATABASE=devDB      - MYSQL\_ROOT\_PASSWORD=12345    ports:      - "3306:3306"    volumes:      - ./mysql\_data:/var/lib/mysql    networks:      - mynetwork   phpmyadmin:    image: phpmyadmin/phpmyadmin:latest    environment:      - PMA\_ARBITRARY=1      - PMA\_HOST=mysql      - PMA\_USER=root      - PMA\_PASSWORD=12345    ports:      - "8080:80"    depends\_on:      - mysql    networks:      - mynetwork networks:  mynetwork: ```js version: '3.3' services: mysql: image: mysql:latest environment: - MYSQL_DATABASE=devDB - MYSQL_ROOT_PASSWORD=12345 ports: - "3306:3306" volumes: - ./mysql_data:/var/lib/mysql networks: - mynetwork phpmyadmin: image: phpmyadmin/phpmyadmin:latest environment: - PMA_ARBITRARY=1 - PMA_HOST=mysql - PMA_USER=root - PMA_PASSWORD=12345 ports: - "8080:80" depends_on: - mysql networks: - mynetwork networks: mynetwork: ```
A quienes les falle la conexión de la base de datos. Escriba en la terminal docker-compose down e inicie nuevamente los servicios
**Error ECONNREFUSED** Para dar solucion a este error: ![](https://static.platzi.com/media/user_upload/image-dfe9042d-ed2f-45cf-ab4e-a853ed9bc183.jpg) Quitamos esta linea: `sequelize.sync();` de sequelize.js ```js ... const USER = encodeURIComponent(config.dbUser); const PASSWORD = encodeURIComponent(config.dbPassword); const URI = `mysql://${USER}:${PASSWORD}@${config.dbHost}:${config.dbPort}/${config.dbName}`; const sequelize = new Sequelize(URI, { dialect: 'mysql', logging: true, }); setupModels(sequelize); //sequelize.sync(); ... ```Tarde 2h solucionando este error, espero les funcione.
Si estan usando visual studio code, pueden descargar la extension database y pueden conectar a una clase de interfaz grafica que tiene, y pueden hacer sus consultas, sin necesidad de instalar en docker una UI

Los que tengas este error:
original: Error: connect ETIMEDOUT
at Connection._handleTimeoutError (/home/alex10/express/my-store/node_modules/mysql2/lib/connection.js:205:17)
at listOnTimeout (node:internal/timers:569:17)
at process.processTimers (node:internal/timers:512:7) {
errorno: ‘ETIMEDOUT’,
code: ‘ETIMEDOUT’,
syscall: ‘connect’,
fatal: true
}
}

Se arregla cambiando la URI en sequilize.js:
const URI = mysql://root:${PASSWORD}@${config.dbHost}:3306/${config.dbName}

ERROR: Dialect needs to be explicitly supplied as of v4.0.0 No puedo arreglar este error. Ya agregué: `NODE_ENV='development'` al archivo .env
tengo este error en la terminal y no se como solucionarlo, ya puse el user como string vacío, también lo intente con la contrana en vacío, revise el tema de los puertos con mysql. estoy trabajando desde una MAC M1 y también puse la plataforma en el file . iml, lei todos los comentarios pero sigo sin poder tener acceso con el usuario root no puedo conectarme al servidor de mysql desde la terminal `code: 'ER_ACCESS_DENIED_ERROR',` `errno: 1045,` `sqlState: '28000',` `sqlMessage: "Access denied for user 'root'@'localhost' (using password: YES)",` `sql: undefined` Alguien puede ayudarme? este es mi repositorio en GitHb <https://github.com/jasonsepulveda/my-store-data>
Sigo los pasos pero no me crea la base de datos en mysql y me aparece el error. Error: Unknown database 'my\_store'
ya le estoy empezando a agarrar carino a docker jaja

con el truco de la “~” al inicio de la ruta de la carpeta de mysql logré tener la persistencia de los datos en el folder del proyecto, sin embargo, me ha sido IMPOSIBLE replicarlo para la carpeta de postgres, he hecho cualquier cantidad de modificaciones, estructuraciones, mengurjes, oraciones y cánticos a todos los dioses y no he podido.

Para No cambiar manualmente el Driver de conexión desde código, cada vez que se cambie de gestor de base de datos:

    1. agregue una nueva variable de entorno en el archivo .env
DB_DRIVER=mysql
    1. configure la nueva variable en el archivo /config/config.js
dbDriver: process.env.DB_DRIVER,
    1. utilice la nueva variable de configuración en el archivo de librería /libs/sequelize.js
const URI = `${config.dbDriver}://${USER}:${PASSWORD}@${config.dbHost}:${config.dbPort}/${config.dbName}`;

const sequelize = new Sequelize(URI, {
  dialect: config.dbDriver,
  logging: true,
});

Así puede cambiar libremente su gestor de base de datos en un entorno de producción sin tener que cambiarlo también en el código.

Me encanta ! ❤️

Es importante que el host de phpmyadmin sea igual al nombre del contenedor de mysql

Tengo este error

"message": "Cannot convert undefined or null to object",

toca tener encuanta si tenemos el port de phpmyadmin si ya lo tenemos local que no este en uso ese puerto 3306.

para aquellos que quieran usar MariaDB deben usar la siguiente versión, si to se optiene un error de meta

    "mariadb": "^2.3.3",

aqui el issue

estan actualizando eso aqui

Si a alquien le sale este error es porque el archivo docker-compose.yml debe estar correctamente identado!
me salia este error y me di cuenta que no tenia bien tabulado las lineas del código.

“Configuration error - Version in “./docker-compose.yml” is unsupported.
You might be seeing this error because you’re using the wrong Compose file version.
Either specify a supported version (e.g “2.2” or “3.3”) and place your service definitions under the services key, or omit the version key and place your service definitions at the root of the file to use version 1.
For more on the Compose file format versions, see https://docs.docker.com/compose/compose-file/

Vaya clase mas fea, estuve haciendo malabares y no pude solucionar los problemas, nose si es porque ya tenia instalado mysql workbench o que, pero fue demasiado frustante

para que todo me funcionara correctamente con el servicio de mysql, coloque el puerto 3307 en mi maquina local y el 3306 en el contenedor
docker-compose.yml:

version: '3.3'

services:
  postgres:
   ...

  pgadmin:
    ...

  mysql:
    image: mysql:5
    environment:
      - MYSQL_DATABASE=my-store
      - MYSQL_USER=root
      - MYSQL_ROOT_PASSWORD=toor
      - MYSQL_PORT=3306
    ports:
      - 3307:3306
    volumes:
      - ./mysql_data:/var/lib/mysql

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    environment:
      - MYSQL_ROOT_PASSWORD=toor
      - PMA_HOST=mysql
    ports:
      - 8080:80

corremos los servicios

docker-compose up -d mysql 
docker-compose up -d phpmyadmin

modificamos puerto en las variables de entorno
.env:

PORT=3000
DB_USER='root'
DB_PASSWORD='toor'
DB_HOST='localhost'
DB_NAME='my-store'
DB_PORT='3307' // puerto en mi maquina local donde corre el contenedor mysql 

modificamos lenguaje y string de conexión
libs/sequelize.js:

const { Sequelize } = require('sequelize')
const { config } = require('../config/config')
const setupModels = require('../db/model/index')

const USER = encodeURIComponent(config.dbUser)
const PASSWORD = encodeURIComponent(config.dbPassword)
const URI = `mysql://${USER}:${PASSWORD}@${config.dbHost}:${config.dbPort}/${config.dbName}`

const sequelize = new Sequelize(URI, {
  dialect: 'mysql',  
  logging: true
})

setupModels(sequelize)

sequelize.sync()

module.exports = sequelize

corremos la aplicación

npm run dev 

insertamos algunos registros con una petición POST a la url “/api/v1/users/”

{
  "email": "[email protected]",
  "password": "12345678"
}
{
  "email": "[email protected]",
  "password": "12345678"
}

luego hacemos una petición GET a la misma url, veremos como respuesta

[
  {
    "id": 1,
    "email": "[email protected]",
    "password": "12345678",
    "createdAt": "2023-02-28T17:57:02.000Z"
  },
  {
    "id": 2,
    "email": "[email protected]",
    "password": "12345678",
    "createdAt": "2023-02-28T17:57:07.000Z"
  }
]

y todo estaría funcionando correctamente con mysql corriendo bien

Perdí mi tiempo nomás con MySQL, no pude hacerlo funcionar, con nada 😦

LIKE A ESTA CLASE
A pesar de los errores jajaja

Hola, también tuve problemas al hacer la conexión con mysql,

  1. Al momento de querer levantar mysql su estado se quedaba en Exit 1.
  2. ConnectionError [SequelizeConnectionError]: Unknown database ‘my_store’.

Por acá les comparto mi solución.

  • Primero como ya tenía instalado el Workbench no me deja usar el mismo puerto por defecto de mysql (3306), por tanto, use el puerto que ya otros compañeros recomendaron, el puerto 33060.
  • Segundo no me dejaba colocar la ruta de la carpeta en “volumes” con el punto (.) sino con la virgulilla (~) .
#docker-compose.yml
  mysql:
    image: mysql:5
    restart: always
    environment:
      - MYSQL_DATABASE=my_store
      - MYSQL_USER=root
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_PORT=3306
    ports:
      - 33060:3306
    volumes:
      - ~/mysql_data:/var/lib/mysql

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - PMA_HOST=mysql
    ports:
      - 8080:80

Como tuve que cambiar el puerto en el servicio de mysql, también se tiene que cambiar en el archivo .env para que se pueda realizar una correcta conexión la bd.

#.env
PORT = 3000
DB_USER='root'
DB_PASSWORD='root'
DB_HOST='localhost'
DB_NAME='my_store'

# === DB_PORT FOR MYSQL ===
DB_PORT='33060'

# === DB_PORT FOR POSTGRES ===
# DB_PORT='5432'

Saludos.

Para los que tengan MAC con chip M1 y les sale en la consola: “no matching manifest for linux/arm64/v8 in the manifest list entries”.

👉🏻Aquí la solución:
solo tienen que agregar esto a su archivo YML:

platform: linux/x86_64
image: mysql:5

Esto no les solucionará el problema de raíz pero su los dejará seguir haciendo el curso.

Link de donde encontré solución

Para los que estén trabajando en MAC con los Chip M1, y les sale el siguiente error al levantar el contenedor de mysql

no matching manifest for linux/arm64/v8 in the manifest list entries

Tienen que agregar la siguiente línea en la definición del servicio:

mysql:
    **platform: linux/x86_64**
    image: mysql:5
    environment:
      - MYSQL_DATABASE=my_store
      - MYSQL_USER=root
      - MYSQL_ROOT_PASSWORD=admin123
      - MYSQL_PORT=3306
    ports:
      - 3306:3306
    volumes:
      - ./mysql_data:/var/lib/mysql

que genial y que fácil es hacer estas migraciones, me esta gustando muchísimo el curso.

tienen que instalar la herramienta de conexión de sequelize para MySQL

npm install --save mysql2

para los que tengan este error

HostNotFoundError [SequelizeHostNotFoundError]: getaddrinfo ENOTFOUND localhost

lo solucione exponiendo el puerto la instancia de sequelize

const sequelize = new Sequelize(URI, {
  dialect: 'mysql',
  logging: true,
  port: PORT
});

Llevo años usando Linux y para hacer mis cosas lidiaba con dependencias y paquetes, de ahora en adelante; solo lidiaré con Docker

No se si alguien mas se percato de que sucede cuando ingresas un correo ya existente, y es que empieza a asignar ID en blanco (Aunque no aparezcan en la tabla) no se si esto es algo bueno o malo

docker-compose.yml

version: '3.3'

services: 
  postgres:
    image: postgres:13
    environment:
      - POSTGRES_DB=my_store
      - POSTGRES_USER=nico
      - POSTGRES_PASSWORD=admin123
    ports:
      - 5432:5432
    # Persitencia bd
    volumes: 
      - ./postgres_data:/var/lib/postgresql/data
      
  # interfaz grafica 
  pgadmin:
    image: dpage/pgadmin4
    environment:
      - [email protected]
      - PGADMIN_DEFAULT_PASSWORD=root
    ports:
      - 5050:80
  
  mysql:
    image: mysql:5
    environment: 
      - MYQSL_DATABASE=my_store
      - MYSQL_USER=
      - MYSQL_ROOT_PASSWORD=admin123
      - MYSQL_PORT=3306
    ports: 
      - 3306:3306
    volumes: 
      - ./mysql_data:/var/lib/mysql
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    environment:
      - MYSQL_ROOT_PASSWORD=admin123
      - PMA_HOST=mysql # nombre del servicio mysql
    ports:
      - 8080:80

Si alguien esta teniendo problemas con la imagen de mysql en docker en una mac con m1, la solución puede ser lo siguiente.

Agregar en el archivo de docker antes de indicar la imagen de mysql.

platform: linux/x86_64

para mac con chip m1 agrgar esto, fue la unica manera de poder usar la imagen de lo contrario tenia un error (no matching manifest…):
mysql:
platform linux/x86_64
image:
mysql:5

increíble clase, ya estoy viendo la importancia de saber utilizar docker

Para aquellos que están usando una MBP M1 y tenga problemas para correr la imagen de MySQL, solo deben agregar la platform: linux/x86_64.

mysql:
    platform: linux/x86_64
    image: mysql:5
    environment:
      - MYSQL_DB=my_store
      - MYSQL_USER=nico
      - MYSQL_ROOT_PASSWORD=admin123
      - MYSQL_PORT=3306
    ports:
      - 3306:3306
    volumes:
      - ./mysql_data:/var/lib/mysql

Saludos y espero les sea de utilidad!

Si tienen problemas iniciando el contenedor pueden intentar correr el comando docker logs seguido del id del contenedor para tener más información para poderlo debugear.
Pueden obtener el id del contenedor con el comando docker ps -al.

para los que salgan error al ejecutar el mysql con docker y no tengan usando el puerto 3306 dabien deben ver los espacios en archivo doker-compose.yml, ya que ami me faltaba darle un tab el mysql al crear su contendedor al inicio del mysql xd

Todo muy claro, gran clase y sobre todo integración con DOCKER.