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

BUGzin

Buenas? Alguem sabe me dizer o que seria esse erro que o console retorna?

npx sequelize db:migrate

Sequelize CLI [Node: 16.14.2, CLI: 6.6.1, ORM: 6.32.1]

Loaded configuration file "api/config/config.json".
Using environment "development".

ERROR: Access denied for user 'root'@'localhost'

mais contexto sobre...

rodei o comando npx sequelize-cli db:migrate e retorna o erro acima mas ja coloquei a senha que é do meu root

 "development": {
    "username": "root",
    "password": "2132",
    "database": "escola_ingles",
    "host": "127.0.0.1",
    "dialect": "mysql",
    "operatorAliases": false
  },

tentei com aspas sem aspas e por vias das duvidas tentei com null, mas nada, pode ser algo ligado ao caminho? o que eu creio estar correto também.


const path = require("path");

module.exports = {
  config: path.resolve("./api/config/", "config.json"),
  "models-path": path.resolve("./api/models"),
  "seeders-path": path.resolve("./api/seeders"),
  "migrations-path": path.resolve("./api/migrations"),
};
10 respostas

Olá, Diógenes! Tudo bem?

Esse erro geralmente ocorre quando as credenciais de acesso ao banco de dados estão incorretas. No seu caso, você já verificou o arquivo de configuração config.json e confirmou que o usuário e senha estão corretos. Então, vamos explorar outras possibilidades.

Uma coisa que você mencionou é que tentou executar o comando com aspas e sem aspas para a senha. Geralmente, as aspas não são necessárias para a senha no arquivo de configuração. Portanto, sugiro remover as aspas e deixar apenas o valor da senha como uma string simples, como no exemplo abaixo:

"development": {
  "username": "root",
  "password": 2132,
  "database": "escola_ingles",
  "host": "127.0.0.1",
  "dialect": "mysql",
  "operatorAliases": false
},

Outra coisa que você mencionou é que tentou usar null como senha. No entanto, é importante fornecer uma senha válida para o usuário root. Se você não definiu uma senha específica para o usuário root, tente usar a senha padrão do MySQL, que é geralmente vazia ou "root".

Além disso, pode ser útil verificar se o usuário root tem permissões adequadas para acessar o banco de dados. Você pode fazer isso executando o seguinte comando no terminal do MySQL:

SHOW GRANTS FOR 'root'@'localhost';

Certifique-se de que o usuário root tenha as permissões necessárias para acessar o banco de dados especificado no arquivo de configuração.

Se todas essas etapas não resolverem o problema, pode ser necessário verificar se há algum problema de configuração no sistema operacional. No vídeo da aula, o instrutor menciona que ele trocou o usuário root por um usuário chamado "alura" e alterou a senha para "admin123". Você pode tentar seguir essas mesmas etapas e alterar o usuário e senha no arquivo de configuração para ver se resolve o problema.

Espero que essas sugestões possam ajudar a resolver o problema de acesso negado ao rodar as migrações. Lembre-se de sempre verificar as credenciais de acesso ao banco de dados e as permissões do usuário.

Se tiver mais alguma dúvida, é só me dizer!

Espero ter ajudado, abraços e bons estudos!

Renan, obrigado pela ajuda. Aqui está o que fiz:

Executei o comando SHOW GRANTS FOR 'root'@'localhost'; e obtive o seguinte resultado:

+-----------------------------------------------------------------------------------------------------------------------------------------+
| Grants for root@localhost                                                                                                               |
+-----------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO `root`@`localhost` IDENTIFIED VIA mysql_native_password USING 'invalid' OR unix_socket WITH GRANT OPTION |
| GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION                                                                           |
+-----------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0,000 sec)

Tentei novamente o comando npx sequelize db:migrate e recebi o seguinte erro:

Sequelize CLI [Node: 16.14.2, CLI: 6.6.1, ORM: 6.32.1]

Arquivo de configuração carregado: "api/config/config.json".
Usando ambiente "development".

ERRO: O argumento "data" deve ser do tipo string ou uma instância de Buffer, TypedArray ou DataView. Recebido o tipo número (2132).

Acredito que esteja correto, pois ao acessar o banco de dados MySQL com mysql -u root -p, ele solicita minha senha root, que é a mesma que passei dentro do campo "password". Coloquei a senha fora de strings, conforme mencionou anteriormente.

Olá Diógenes! Eaí tudo ok?

Obrigado por compartilhar os resultados da sua investigação. Parece que estamos progredindo no diagnóstico do problema. Vamos continuar trabalhando nisso para resolver o erro.

Primeiro, em relação à saída do comando SHOW GRANTS FOR 'root'@'localhost';, vemos que o usuário root tem privilégios concedidos no banco de dados, o que é bom. Isso elimina um possível problema de permissões.

Agora, em relação ao novo erro que você está enfrentando:

ERRO: O argumento "data" deve ser do tipo string ou uma instância de Buffer, TypedArray ou DataView. Recebido o tipo número (2132).

Esse erro parece indicar um problema com o tipo de dado que está sendo passado. Parece que o Sequelize espera uma string ou um tipo de dado relacionado, mas está recebendo um número (2132) no campo de senha.

Isso sugere que a forma como a senha está sendo lida ou passada para o Sequelize pode estar causando esse problema. Vamos tentar algumas coisas para resolver isso:

  1. Volte para o arquivo config.json e verifique novamente como a senha está definida. Certifique-se de que não haja nenhum erro de digitação e que a senha esteja sendo definida como uma string. Por exemplo:

    "development": {
      "username": "root",
      "password": "2132",
      "database": "escola_ingles",
      "host": "127.0.0.1",
      "dialect": "mysql",
      "operatorAliases": false
    },
    
  2. Verifique se não há outros locais no seu código onde a senha está sendo passada como um número. Verifique se não há manipulação ou conversões estranhas acontecendo.

  3. Caso você tenha migrado recentemente para uma versão mais recente do Sequelize ou Node.js, é possível que algumas mudanças no comportamento estejam causando esse problema. Verifique a documentação do Sequelize para a versão que você está usando e veja se há algum ajuste necessário na forma como as configurações são passadas.

Além disso, vale a pena conferir se você está usando a versão mais recente do Sequelize CLI e Node.js, já que atualizações podem corrigir problemas conhecidos.

Espero que essas dicas possam ajudar a resolver esse novo desafio. Não hesite em me informar sobre qualquer desenvolvimento ou dúvida adicional que você tenha. Estamos aqui para ajudar!

Boa sorte, abraços e bons estudos!

Fala Renan, bom dia!

Cara, fiz uma alteração no config.json conforme tu mostraste, colocando a senha entre aspas. No entanto, ao verificar novamente, ainda obtive o erro de acesso inválido. O que notei é que mesmo apresentando esse erro, eu consigo acessar diretamente pelo terminal. Vou deixar o vídeo para tu dar uma olhada: https://drive.google.com/file/d/1kpsmMWs-Z_XakwW288R19NFBP1xlzN0E/view?usp=sharing.

Como dá para perceber no vídeo, o erro ocorre, mas eu ainda consigo acessar o banco com a mesma senha. Estou na dúvida se há alguma ligação entre esses problemas e, se houver, qual poderia ser o motivo pelo qual não está funcionando, shushs.

"Além disso, vale a pena conferir se você está usando a versão mais recente do Sequelize CLI e Node.js, já que atualizações podem corrigir problemas conhecidos."

beleza vou tentar essas opções também .

Oii, tudo bem?

Você poderia liberar o acesso ao vídeo, para que eu possa entender melhor o problema.

Aqui para mim ele está aparecendo assim:

imagem de sem acesso ao documento versão drive

Assim que você liberar ele, eu dou uma olhadinha.

Abraços.

Boa tarde, blzz? a Principio é o link correto Drive

Assite no 2X heheh

solução!

Oi Diógenes, tudo bem?

Você chegou a executar algum comando de permissões do MySQL? Caso você queira confirmar que as permissões estão sendo dadas para root, pode tentar executar os comandos abaixo:

mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'PASSWORD';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;

Porém, se quiser tentar a abordagem que usamos no curso de criar um novo usuário, o processo é bem sucinto (lembre-se de usar senhas com pelo menos 8 caracteres que é o policy padrão do MySQL):

USE mysql;
CREATE USER 'seuusuario'@'localhost' IDENTIFIED BY 'suaSenhaSecreta123';
GRANT ALL ON *.* TO 'seuusuario'@'localhost';
FLUSH PRIVILEGES;

Aí você só precisa trocar os dados no arquivo de configs de conexão do Sequelize:

"development": {
  "username": "seuusuario",
  "password": "suaSenhaSecreta123",
  "database": "escola_ingles",
  "host": "127.0.0.1",
  "dialect": "mysql",
  "operatorAliases": false
},

Espero ter ajudado!

Ola, Juliana Amoasei Muito obrigado pela Ajuda, gratidão mesmo! Funcionou apos procurar algumas alternativas pode ser porque minha senha não estava coreeta com o que o sequelize esperava mas fazendo novo usuário e senha funcionou. Renan Cezar obrigado por toda atenção e paciência, Tu foi fera !

Boa noite, provavelmente ja tenha resolvido, mas não seria o erro por causa que estava faltando colocar npx sequelize*-cli* db:migrate ? Estava faltando o -cli quando escreveu

E ai, Thiago beleza? Agradeço, possivelmente um dos erros, mas resolvi usando o outro user pra conectar no banco.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software