Não consigo fazer uma conexão simples com o servidor por algum motivo. Eu instalo o mais novo banco de dados MySQL Community 8.0 junto com o Node.JS com as configurações padrão.
Este é o meu código node.js
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "root",
password: "password",
insecureAuth : true
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
});
Abaixo está o erro encontrado no prompt de comando:
C:\Users\mysql-test>node app.js
C:\Users\mysql-test\node_modules\mysql\lib\protocol\Parse
r.js:80
throw err; // Rethrow non-MySQL errors
^
Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
at Handshake.Sequence._packetToError (C:\Users\mysql-
test\node_modules\mysql\lib\protocol\sequences\Sequence.js:52:14)
at Handshake.ErrorPacket (C:\Users\mysql-test\node_mo
dules\mysql\lib\protocol\sequences\Handshake.js:130:18)
at Protocol._parsePacket (C:\Users\mysql-test\node_mo
dules\mysql\lib\protocol\Protocol.js:279:23)
at Parser.write (C:\Users\mysql-test\node_modules\mys
ql\lib\protocol\Parser.js:76:12)
at Protocol.write (C:\Users\mysql-test\node_modules\m
ysql\lib\protocol\Protocol.js:39:16)
at Socket.<anonymous> (C:\Users\mysql-test\node_modul
es\mysql\lib\Connection.js:103:28)
at Socket.emit (events.js:159:13)
at addChunk (_stream_readable.js:265:12)
at readableAddChunk (_stream_readable.js:252:11)
at Socket.Readable.push (_stream_readable.js:209:10)
--------------------
at Protocol._enqueue (C:\Users\mysql-test\node_module
s\mysql\lib\protocol\Protocol.js:145:48)
at Protocol.handshake (C:\Users\mysql-test\node_modul
es\mysql\lib\protocol\Protocol.js:52:23)
at Connection.connect (C:\Users\mysql-test\node_modul
es\mysql\lib\Connection.js:130:18)
at Object.<anonymous> (C:\Users\mysql-test\server.js:
11:5)
at Module._compile (module.js:660:30)
at Object.Module._extensions..js (module.js:671:10)
at Module.load (module.js:573:32)
at tryModuleLoad (module.js:513:12)
at Function.Module._load (module.js:505:3)
at Function.Module.runMain (module.js:701:10)
Eu li algumas coisas como: https://dev.mysql.com/doc/refman/5.5/en/old-client.html https://github.com/mysqljs/mysql/issues/1507
Mas ainda não tenho certeza de como resolver meu problema. Qualquer ajuda seria apreciada: D
Respostas:
Execute a seguinte consulta no MYSQL Workbench
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'
Onde,
root
como usuário,localhost
como URL epassword
senhaEm seguida, execute esta consulta para atualizar os privilégios:
flush privileges;
Tente conectar-se usando o nó depois de fazer isso.
Se isso não funcionar, tente sem
@'localhost'
parte.fonte
flush privileges;
depois.caching_sha2_password
é introduzido no MySQL 8.0, mas a versão do Node.js. ainda não foi implementada.Vamos primeiro esclarecer o que está acontecendo.
O MySQL 8 suporta métodos de autenticação conectáveis. Por padrão, um deles nomeado
caching_sha2_password
é usado, e não o nosso bom e velhomysql_native_password
( fonte ). Deveria ser óbvio que o uso de um algoritmo de criptografia com vários handshakes é mais seguro do que a simples passagem de senha que existe há 24 anos !Agora, o problema está
mysqljs
no Node (o pacote com o qual você instalanpm i mysql
e o usa no código do Node) ainda não suporta esse novo método de autenticação padrão do MySQL 8. O problema está aqui: https://github.com/mysqljs/mysql/issues/1507 e ainda está aberto, após três anos, a partir de julho de 2019.(ATUALIZAÇÃO junho 2019: Há uma nova PR em mysqljs agora para corrigir isso! ) (ATUALIZAÇÃO fevereiro 2020: Aparentemente, ele está programado para entrar na versão 3 do mysqljs . )
Suas opções
Opção 1) Faça o downgrade do "MySQL" para autenticar usando o bom e antigo "native_password"
Isso é o que todos sugerem aqui (por exemplo, resposta principal acima ). Você acabou de entrar
mysql
e executar uma consulta dizendo queroot
está bem usando onative_password
método antigo para autnetication:O bom é que a vida será simples e você ainda poderá usar boas ferramentas antigas como o Sequel Pro sem nenhum problema . Mas o problema é que você não está tirando proveito de materiais mais seguros (e legais, leia abaixo) disponíveis para você.
Opção 2) Substitua o pacote "Node" pelo MySQL Connecter X DevAPI
O MySQL X DevAPI for Node é um substituto do pacote Mysqljs do Node , fornecido por http://dev.mysql.com pessoal oficial.
Funciona como um encanto que suporta
caching_sha2_password
autenticação. (Apenas certifique-se de usar a porta33060
para comunicações do protocolo X. )O ruim é que você deixou o nosso
mysql
pacote antigo com o qual todos estão tão acostumados e confiam.O bom é que seu aplicativo está mais seguro agora e você pode aproveitar uma tonelada de novidades que nossos bons e velhos amigos não forneceram! Basta dar uma olhada no tutorial do X DevAPI e você verá que ele tem vários novos recursos sexy que podem ser úteis. Você só precisa pagar o preço de uma curva de aprendizado, que é esperada com qualquer atualização de tecnologia. :)
PS. Infelizmente, este pacote XDevAPI ainda não possui definição de tipos (compreensível pelo TypeScript); portanto, se você estiver com texto datilografado , terá problemas. Tentei gerar .d.ts usando
dts-gen
edtsmake
, mas sem sucesso. Portanto, tenha isso em mente.Felicidades!
fonte
Usando os
mysql_native_password
trabalhos antigos :Isso ocorre porque
caching_sha2_password
é introduzido no MySQL 8.0, mas a versão do Node.js. ainda não está implementada. Você pode ver esta solicitação de recebimento e esse problema para obter mais informações. Provavelmente uma solução virá em breve!fonte
Etapas completas para o MySQL 8
Conecte-se ao MySQL
Redefina sua senha
(Substitua
your_new_password
pela senha que você deseja usar)Em seguida, tente conectar-se usando o nó
fonte
Embora a resposta aceita esteja correta, prefiro criar um novo usuário e depois usá-lo para acessar o banco de dados.
fonte
Se você encontrou esse erro, mas ainda desejava usar a
MySQL
versão 8. Você pode conseguir isso dizendo ao MySQL Server para usar o plug-in de autenticação herdado ao criar o banco de dadosDocker
.Portanto, seu
compose
arquivo ficará assim:fonte
command
, mas ainda está recebendo a mensagem de erro de autenticação sem suporte ao usarmysql
em Node.jsError: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
No contêiner de docker mais recente do Mysql
fonte
Se a linha de comando ALTER USER ... não funcionar para você E se você estiver usando o Windows 10, tente seguir estas etapas:
1) Digite MySQL na barra de pesquisa do Windows
2) Abra o MySQL Windows Installer - Comunidade
3) Procure por "servidor MySQL" e clique em Reconfigurar
4) Clique em "Avançar" até chegar à fase "Método de autenticação"
5) Na fase "Método de autenticação", verifique a segunda opção "Usar método de autenticação herdado"
6) Siga as etapas fornecidas pelo instalador do Windows até o final
7) Quando terminar, entre em "Serviços" na barra de pesquisa do Windows, clique em "Iniciar" MySql81 ".
Agora, tente novamente, a conexão entre MySQL e Node.js deve funcionar!
fonte
A maioria das respostas nesta pergunta resulta em um downgrade para o mecanismo de autenticação de
caching_sha2_password
paramysql_native_password
. Do ponto de vista da segurança, isso é bastante decepcionante.Este documento discute extensivamente
caching_sha2_password
e, é claro, por que NÃO deve ser a primeira opção para fazer o downgrade do método de autenticação.Com isso, acredito que a resposta de Aidin deve ser a resposta aceita. Em vez de fazer o downgrade do método de autenticação, use um conector que corresponda à versão do servidor.
fonte
Documentação original que você pode encontrar aqui: https://dev.mysql.com/doc/dev/connector-nodejs/8.0/
fonte
Eu tenho o MYSQL no servidor e o aplicativo nodejs em outro servidor
Execute a seguinte consulta no MYSQL Workbench
ALTER USUÁRIO 'root' @ '%' IDENTIFICADO COM mysql_native_password BY 'password'
fonte
Para instalações existentes do mysql 8.0 no Windows 10 mysql,
(1) instalador de lançamento,
(2) clique em "Reconfigurar" em QuickAction (à esquerda do MySQL Server), depois
(3) clique em Avançar para avançar pelas próximas 2 telas até chegar
(4) em "Método de autenticação", selecione "Usar método de autenticação herdado (mantenha a compatibilidade do MySQL 5.x"
(5) Continue clicando até a instalação ser concluída
fonte
Com o MySQL 8+, a nova autenticação padrão é em
caching_sha2_password
vez demysql_native_password
. O novo e mais seguro método de autenticação ainda não é suportado pelomysql
pacote nativo , mas você deve considerar o uso do pacote@mysql/xdevapi
, que é oficialmente suportado e mantido pela Oracle.Para instalar o novo pacote, execute:
Para conectar-se ao banco de dados e INSERIR alguns VALORES:
A documentação oficial do pacote pode ser encontrada aqui: https://dev.mysql.com/doc/dev/connector-nodejs/8.0/
fonte
Se você estiver usando o docker, funcionou para mim!
no
docker-compose.yml
adicione as seguintes linhas:depois disso,
down
o recipiente eup
novamente.fonte
Além das respostas acima; Depois de executar o comando abaixo
Se você receber um erro como:
Em seguida, tente no cmd como administrador; defina o caminho para a pasta bin do servidor MySQL no cmd
e, em seguida, execute o comando:
Isso deve atualizar o servidor e as tabelas do sistema.
Em seguida, você poderá executar com êxito os comandos abaixo em uma Consulta no Workbench:
lembre-se de executar o seguinte comando:
Após todas essas etapas, você poderá se conectar com sucesso ao seu banco de dados MySQL. Espero que isto ajude...
fonte
Basta executar o MySQL Server Installer e reconfigurar o My SQL Server ... Isso funcionou para mim.
fonte
Verifique privilégios e nome de usuário / senha para o seu usuário MySQL.
Para detectar erros, é sempre útil usar o
_delegateError
método substituído . No seu caso, isso deve se parecer com:Essa construção o ajudará a rastrear erros fatais.
fonte
Só descobri isso depois de tentar várias coisas. O que finalmente fez por mim foi adicionar
require('dotenv').config()
ao meu.sequelizerc
arquivo. Aparentemente, sequelize-cli não lê variáveis env.fonte
A Classificação para baixo pode não ser uma boa opção, pois:
Você pode usar o
mysql2
pacote no lugar demysql
. É principalmente API compatível com mysqljs. Além disso, tem suporte promissor.Use-o como:
const mysql = require('mysql2/promise')
Você pode ler mais sobre
mysql2
aqui: https://www.npmjs.com/package/mysql2Espero que ajude. :)
fonte
Você pode pular o ORM, construtores, etc. e simplificar o gerenciamento de DB / SQL usando
sqler
esqler-mdb
.fonte
Tenho o mesmo problema com o MySQL e resolvo usando o XAMPP para conectar-me ao MySQL e interromper os serviços no Windows para MySQL (painel de controle - Ferramentas Administrativas - Serviços) e na pasta db.js (responsável pelo banco de dados). deixe a senha vazia (aqui você pode ver :)
fonte