Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Não consigo conectar ao banco de dados

Eu ja instalei e reinstalei algumas vezes o mysql tanto no instalador CE do windows como via docker e sempre tenho esse erro.

Eu consigo conectar via workbench mas não via aplicação. COnsigo inclusive conectar e criar o schema agenda-petshop.

 npm start

> agenda-petshop@1.0.0 start /mnt/c/Users/heron/Code/Alura/05-graphql/agenda-petshop
> nodemon server.js

[nodemon] 1.19.0
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node server.js`
consign v0.1.6 Initialized in /mnt/c/Users/heron/Code/Alura/05-graphql/agenda-petshop
+ ./controllers/atendimento.js
+ ./controllers/cliente.js
+ ./controllers/pet.js
+ ./controllers/servico.js
Servidor rodando na porta 4567
Error: connect ECONNREFUSED 127.0.0.1:3306
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1141:16)
    --------------------
    at Protocol._enqueue (/mnt/c/Users/heron/Code/Alura/05-graphql/agenda-petshop/node_modules/mysql/lib/protocol/Protocol.js:144:48)
    at Protocol.handshake (/mnt/c/Users/heron/Code/Alura/05-graphql/agenda-petshop/node_modules/mysql/lib/protocol/Protocol.js:51:23)
    at Connection.connect (/mnt/c/Users/heron/Code/Alura/05-graphql/agenda-petshop/node_modules/mysql/lib/Connection.js:119:18)
    at Object.<anonymous> (/mnt/c/Users/heron/Code/Alura/05-graphql/agenda-petshop/server.js:7:9)
    at Module._compile (internal/modules/cjs/loader.js:1138:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
    at Module.load (internal/modules/cjs/loader.js:986:32)
    at Function.Module._load (internal/modules/cjs/loader.js:879:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
    at internal/main/run_main_module.js:17:47 {
  errno: 'ECONNREFUSED',
  code: 'ECONNREFUSED',
  syscall: 'connect',
  address: '127.0.0.1',
  port: 3306,
  fatal: true
}
conectou no banco
tabelas criadas!
Error: Cannot enqueue Query after fatal error.
    at Protocol._validateEnqueue (/mnt/c/Users/heron/Code/Alura/05-graphql/agenda-petshop/node_modules/mysql/lib/protocol/Protocol.js:212:16)
    at Protocol._enqueue (/mnt/c/Users/heron/Code/Alura/05-graphql/agenda-petshop/node_modules/mysql/lib/protocol/Protocol.js:138:13)
    at Connection.query (/mnt/c/Users/heron/Code/Alura/05-graphql/agenda-petshop/node_modules/mysql/lib/Connection.js:201:25)
    at Tabelas.criaTabela (/mnt/c/Users/heron/Code/Alura/05-graphql/agenda-petshop/infraestrutura/database/tabelas.js:37:18)
    at Tabelas.criaClientes (/mnt/c/Users/heron/Code/Alura/05-graphql/agenda-petshop/infraestrutura/database/tabelas.js:15:10)
    at Tabelas.init (/mnt/c/Users/heron/Code/Alura/05-graphql/agenda-petshop/infraestrutura/database/tabelas.js:4:10)
    at Handshake.<anonymous> (/mnt/c/Users/heron/Code/Alura/05-graphql/agenda-petshop/server.js:14:11)
    at Handshake.<anonymous> (/mnt/c/Users/heron/Code/Alura/05-graphql/agenda-petshop/node_modules/mysql/lib/Connection.js:525:10)
    at Handshake._callback (/mnt/c/Users/heron/Code/Alura/05-graphql/agenda-petshop/node_modules/mysql/lib/Connection.js:491:16)
    at Handshake.Sequence.end (/mnt/c/Users/heron/Code/Alura/05-graphql/agenda-petshop/node_modules/mysql/lib/protocol/sequences/Sequence.js:83:24) {
  code: 'PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR',
  fatal: false
}
Error: Cannot enqueue Query after fatal error.
    at Protocol._validateEnqueue (/mnt/c/Users/heron/Code/Alura/05-graphql/agenda-petshop/node_modules/mysql/lib/protocol/Protocol.js:212:16)
    at Protocol._enqueue (/mnt/c/Users/heron/Code/Alura/05-graphql/agenda-petshop/node_modules/mysql/lib/protocol/Protocol.js:138:13)
    at Connection.query (/mnt/c/Users/heron/Code/Alura/05-graphql/agenda-petshop/node_modules/mysql/lib/Connection.js:201:25)
    at Tabelas.criaTabela (/mnt/c/Users/heron/Code/Alura/05-graphql/agenda-petshop/infraestrutura/database/tabelas.js:37:18)
2 respostas
solução!

Olá Heron, tudo bem com você?

Normalmente esse erro é dado quando estamos trabalhando com o mysql 8, pois o driver do node ainda não suporta a criptografia de senha que é utilizada nessa última versão :/

Para corrigir isso, dado que você tem conhecimento em docker é subir uma versão 5.6

docker run --name alura-mysql -e MYSQL_ROOT_PASSWORD=alura -p 3306:3306 -d mysql:5.6

Dessa maneira a conexão ficará da mesma forma:

const conexao = mysql.createConnection({
  host: 'localhost',
  port: 3306,
  user: 'root',
  password: 'alura',
  database: 'agenda_petshop'
})

E a conexão será realizada com sucesso :)

Quando queremos algo nativo, ai a situação seria diferente, no processo de instalação, existe uma opção que é para utilizar o modo antigo de senha, e dessa forma a conexão também funcionaria, mas subir um docker com a versão correta é bem mais rápido e tranquilo

Abraços e Bons Estudos!

Depois de longas batalhas e o passar do tempo deixando minha barba mais esbranquecidas que as cinzas dos meus inimigos consegui passar dessa aula que ja havia pensado em desistir.

Obrigado jovem companheiro.

ou seja, instalei de desinstalei dezenas de versões e só com sua ajuda consegui