5
respostas

Problemas com o MySQL

Olá galera da Alura.Quando executo o

curl http://localhost:3000/pagamentos/pagamento POST -v -H "Content-type: application/json" -d @files/pagamento.json | json_pp

, eu nao consigo gravas os dados do arquivo pagamento.json na tabela do banco de dados. Também nao consigo acessar o banco de dados usando o comando: mysql -u root , quando utlizo este comando, ele dá um aviso de Acesso Negado para o usuário root. Já tentei várias coisas pra resolver o problema.Já usei o Postman para fazer as requisições post..Já baixei o projeto da aula 2.Eu exclui a pasta node_modules e reinstalei as dependências usando o npm install, mas nada disso resolveu.Alguém sabe o que ta acontecendo??

5 respostas

Antonio, boa tarde!

Me parece que você está tendo um problema com a permissão de usuário do MySQL, isso pode estar ocorrendo pois ou o usuário ou a senha está incorreta, esse foi um problema que eu também passei, pessoalmente vejo duas soluções:

1- Reinstalar o MySQL 2- Criar um novo usuário no MySQL

Você pode estar se perguntando: "Por que reinstalar o MySQL?", o acesso está dando negado pois a senha está incorreta. Se você souber a senha você pode rodar o comando:

mysql -u root -p

E ele irá pedir usa senha, você digita ela, se você souber isso irá resolver.

Caso não, vamos passar pra uma das duas soluções

1 - Reinstalar MySQL: Você pode encontrar o passo a passo no tutorial abaixo:

https://cursos.alura.com.br/course/mysql-manipule-dados-com-sql/task/56428

2- Criar um novo usuário: Você pode encontrar o passo a passo no tutorial abaixo:

https://tidahora.com.br/como-criar-um-novo-usuario-e-conceder-permissoes-no-mysql/

Espero ter ajudado e bons estudos!

Nenhuma das alternativas funcionou.Antes de explicar o que aconteceu, eu vou dar uma dica para a Alura.Eu sou aluno desde 2018, e não é a primeira vez que isso acontece.No curso de Android II Integração com apps e recursos do device, até hoje, ninguém conseguiu solucionar o problema de rotação de foto.Já passei por outros problemas também, e tive que me virar sozinho pra resolver.Este é um problema da Alura. A Alura tem que começar a dar tutoriais de como resolver problemas de instalação ou em de como resolver problemas em ferramentas de programação.Ou ainda atualizar os cursos conforme os problemas vão ocorrendo.Este curso de Node é de 2016, de lá pra cá o mysql modificou a senha padrão de usuário, ela não é mais vazia.

Eu tentei criar um novo usuário, mas é preciso ter a senha do root.Aliás, qualquer coisa que tente fazer no mysql,ele exige uma senha. Seja pra acessar o banco de dados, criar um novo usuário ou trocar a senha do root.

Também reinstalei o MySQL usando o mysql-installer-web-community-8.0.19.0 e criei uma senha para o root, mas não resolveu o problema, pois o pacote MySQL que o npm instala é específico para o projeto do Node, ou seja, o mysql-installer-web-community-8.0.19.0 não modifica nada no mysql do Node.

Não consigo avançar no curso por conta deste problema.A solução mais fácil é descobrir qual é a senha padrão do mysql que o npm instala para o Node.Será que alguém me dizer como fazer isso???

Antonio, boa tarde!

Quando você reinstalou o mysql e criou uma nova senha deu o mesmo erro? Você chegou a alterar a senha para a correta no seu arquivo do NodeJS? O MySQL que você instala no seu computador e o que você usa no projeto NodeJS são o mesmo por isso você tem que usar a mesma senha e usuário em ambos.

Muito obrigado pelo feedback e perdão pelo inconveniente, estamos sempre trabalhando pra melhorar e trazer a melhor qualidade nos nossos cursos, infelizmente ocorrem esses erros acontecem e estamos nos policiando para melhorar sempre!

Para que a gente possa te ajudar melhor, você poderia falar se ainda está recebendo o mesmo erro? E mandar a mensagem de erro inteira aqui

Aguardo sua resposta e bons estudos!

O problema continua.Eu instalei o mysql-installer-web-community-8.0.19, segui todos os passos, criei uma senha nova para o root, coloquei a nova senha no arquivo connectionFactory:
var mysql  = require('mysql');

function createDBConnection(){
        return mysql.createConnection({
            host: 'localhost',
            user: 'root',
            password: 'novaSenha',
            database: 'payfast'
        });
}

module.exports = function() {
    return createDBConnection;
}
E mesmo assim ele continua mostrando o erro de Acesso Negado ao Mysql.Até quando este problema vai continuar? 

Será que vcs não conseguem descobrir qual é a senha que vem no mysql quando usamos o npm install --save mysql??? É só isso que falta.Repito, a instalação do mysql-installer-web-community-8.0.19 não resolve nada, pois o mysql instalado pelo npm fica separado do mysql que eu baixei do site da Oracle. Alguém por favor tem uma solução???Ou tem algum jeito para criar a mesma tabela usando o workbench do Mysql da Oracle e poder alterar o arquivo connectionFactory para se conectar a esta nova tabela???

Olá Antônio, tudo bem com você?

Antes de mais nada eu recomendaria que ao invés de fazer esse curso, que é um pouco antigo, seguir o recomendado pela Formação NodeJS, que no caso é um curso parecido: Rest Com NodeJS: API Com Express e MySQL

Em relação ao seu problema, alguns pontos:

Será que vcs não conseguem descobrir qual é a senha que vem no mysql quando usamos o npm install --save mysql?

Então, quando utilizamos esse comando do npm não estamos fazendo download de uma versão do mysql, na verdade estamos apenas pegando um driver de conexão, ele não tem senha ou coisas parecidas, ele apenas nos provê todos recursos que o mysql tem a nos oferecer, sendo apenas a ponte entre nossa aplicação node e o banco instalado localmente

Agora em relação a sua dúvida, isso acontece porque o driver que é instalado não tem compatibilidade com a versão do Mysql8 que trouxe uma nova forma de cadastrar a senha, utilizando autenticação por criptografia baseado no SHA256

Para solucionar isso temos que declarar que queremos utilizar a forma antiga de senha, para que o driver quando tente se conectar tenha sucesso, e para isso, temos que ou alterar a senha do root ou criar um usuário e adotar a senha sem criptografia da seguinte maneira:

Com root:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'novasenha';

Quando utilizamos o mysql_native_password não teremos mais o problema de criptografia

Caso seja criar um novo usuário:

  • Entrar no banco de dados pelo terminal
    • CREATE USER 'usuario'@'localhost' IDENTIFIED BY 'senha';
    • GRANT ALL PRIVILEGES ON *.* TO 'usuario'@'localhost';
    • FLUSH PRIVILEGES;

E ai temos que utilizar o primeiro comando novamente trocando root pelo nome do usuário, dessa forma quando o driver de conexão tentar acessar o banco de dados não será barrado pela criptografia

Aqui no curso atual, temos um vídeo de instalação que mostra que podemos escolher essa opção logo ao fazer download do mysql : Conectando ao Mysql

Abraços e Bons Estudos!