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

[Bug] java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)

Bom dia a todos

Eu ainda estou com bug no projeto, e se alguém puder me ajudar, agradeço.

Quando eu tento digitar esse comando no terminal:

 docker run -d -p 3306:3306 --name mysql-container -e MYSQL_ROOT_PASSWORD=root -e M
YSQL_PASSWORD=root mysql:8.0.32

acontece esse erro:

docker: Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:3306 -> 0.0.0.0:0: listen tcp 0.0.0.0:3306: bind: Normalmente é permitida apenas uma utilização de cada endereço de
 soquete (protocolo/endereço de rede/porta).

Mas ele cria o container no docker, mas se eu for no docker e reiniciar o projeto, ele vai, mas ele me mostra no meio dessas mensagens, aparece essa mensagem:

2023-04-17 08:39:22 2023-04-17 11:39:22+00:00 [Warn] [Entrypoint]: MYSQL_PASSWORD specified, but missing MYSQL_USER; MYSQL_PASSWORD will be ignored

E fazendo todos os passos no terminal, depois disso, tento rodar o projeto no intellij e dá esse erro:

java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)

2023-04-17 08:40:46.819  WARN 1972 --- [  restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.internal.exception.FlywaySqlException: 
Unable to obtain connection from database: Access denied for user 'root'@'localhost' (using password: YES)
----------------------------------------------------------------------------------------------------------
SQL State  : 28000
Error Code : 1045
Message    : Access denied for user 'root'@'localhost' (using password: YES)

Eu gostaria de saber qual seria o erro que eu estou cometendo

PS: não é o primeiro forum que eu abro aqui nesta mesma parte, tem 2 tópicos, o primeiro e o segundo. Eu to travado desde quinta com isso e preciso de ajuda

3 respostas

vou escrever todos os comandos que eu escrevi no terminal para ver se eu escrevi algo errado:

docker pull mysql: 8.0.32 //to usando a versão mais recente do mysql

docker run -d -p 3306:3306 --name mysql-container -e MYSQL_ROOT_PASSWORD=root -e MYSQL_PASSWORD=root mysql:8.0.32

docker exec -it mysql-container bash

mysql -u root -p
root //password

create database forum;

E os arquivos de properties, pom xml estão neste fórum

solução!

Olá, bom dia. Certo, então vamos por partes:

Primeiramente, vi que você passa a variável ambiente MYSQL_ROOT_PASSWORD com a senha desejada para o usuário root, com o valor root. Ou seja, o usuário root do MySQL desse container terá a senha root. Até aí, tudo bem (apesar de a senha ser fraca, o que está tudo bem se for para uso local, mas deveria considerar usar uma senha forte, se o serviço for usado externamente ou em produção).

Mas vi que você passa também a variável ambiente MYSQL_PASSWORD, mas não passa a variável MYSQL_USER. Essas duas variáveis servem para, caso você queira, que um novo usuário (além do root) seja criado automaticamente o iniciar esse container. É necessário que, se uma dessas duas variáveis for passada, então a outra também seja. Por exemplo, se você deseja criar um novo usuário minha-aplicacao com a senha minha-aplicacao-password, então você passa -e MYSQL_USER=minha-aplicacao -e MYSQL_PASSWORD=minha-aplicacao-password. E, caso não queira criar um novo usuário (que parece ser o seu caso, já que pelos logs me parece que vc usa o proprio root na aplicação), então basta omitir essas duas variáveis.

O segundo ponto é que você está tentando expor a porta 3306 do container na porta 3306 do host. Pela mensagem de erro, docker: Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:3306 -> 0.0.0.0:0: listen tcp 0.0.0.0:3306: bind: Normalmente é permitida apenas uma utilização de cada endereço de soquete (protocolo/endereço de rede/porta)., me parece que a porta 3306 já está alocada no host. Neste caso, você precisa descobrir qual serviço está alocando essa porta e interrompê-lo, ou usar outra porta (livre) do host para export a porta 3306 do container. Se você tem outros containers do MySQL executando, ou se tiver instalado o MySQL localmente/nativamente no seu computador, pode ser que o problema esteja aí. Se for o primeiro caso, interrompa os outros containers e veja se esse novo container sobe. Se for o segundo caso, acesse o painel de controle de Serviços do Windows (pressione Win + R, digite services.msc, ENTER), localize o serviço do MySQL, que provavelmente estará Em Execução, e interrompa-o. Se ele estiver configurado para iniciar automaticamente, vc pode dar 2 cliques e trocar pra iniciar manualmente, se quiser.

E em relação ao erro java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES), provavelmente o que está acontecendo é que sua aplicação não está se conectando ao MySQL do container, mas provavelmente a algum outro MySQL que você tem executando localmente, seja por instalação nativa, seja por outro container, como falei na mensagem anterior.