Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
10
respostas

[ERRO] Access denied for user 'root'@'172.20.0.3' (using password: YES)

Forma de reproduzir: Ao emitir o comando docker compose up --build

Resultado:

SQL State  : 28000
Error Code : 1045
Message    : Access denied for user 'root'@'172.20.0.3' (using password: YES)

Mais detalhes:

Caused by: org.flywaydb.core.internal.exception.FlywaySqlException: Unable to obtain connection from database: Access denied for user 'root'@'172.20.0.3' (using password: YES)
app-1    | -----------------------------------------------------------------------------------------------------------
app-1    | SQL State  : 28000
app-1    | Error Code : 1045
app-1    | Message    : Access denied for user 'root'@'172.20.0.3' (using password: YES)
app-1    |
app-1    | 	at org.flywaydb.core.internal.jdbc.JdbcUtils.openConnection(JdbcUtils.java:60) ~[flyway-core-10.10.0.jar:na]
app-1    | 	at org.flywaydb.core.internal.jdbc.JdbcConnectionFactory.<init>(JdbcConnectionFactory.java:72) ~[flyway-core-10.10.0.jar:na]
app-1    | 	at org.flywaydb.core.FlywayExecutor.execute(FlywayExecutor.java:134) ~[flyway-core-10.10.0.jar:na]
app-1    | 	at org.flywaydb.core.Flyway.migrate(Flyway.java:147) ~[flyway-core-10.10.0.jar:na]
app-1    | 	at org.springframework.boot.autoconfigure.flyway.FlywayMigrationInitializer.afterPropertiesSet(FlywayMigrationInitializer.java:66) ~[spring-boot-autoconfigure-3.3.1.jar:3.3.1]
app-1    | 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1835) ~[spring-beans-6.1.10.jar:6.1.10]
app-1    | 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1784) ~[spring-beans-6.1.10.jar:6.1.10]
app-1    | 	... 94 common frames omitted
app-1    | Caused by: java.sql.SQLException: Access denied for user 'root'@'172.20.0.3' (using password: YES)
app-1    | 	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:130) ~[mysql-connector-j-8.3.0.jar:8.3.0]
app-1    | 	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-j-8.3.0.jar:8.3.0]
app-1    | 	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:815) ~[mysql-connector-j-8.3.0.jar:8.3.0]
app-1    | 	at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:438) ~[mysql-connector-j-8.3.0.jar:8.3.0]
app-1    | 	at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) ~[mysql-connector-j-8.3.0.jar:8.3.0]
app-1    | 	at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:189) ~[mysql-connector-j-8.3.0.jar:8.3.0]
app-1    | 	at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:137) ~[HikariCP-5.1.0.jar:na]
app-1    | 	at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:360) ~[HikariCP-5.1.0.jar:na]
app-1    | 	at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202) ~[HikariCP-5.1.0.jar:na]
app-1    | 	at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:461) ~[HikariCP-5.1.0.jar:na]
app-1    | 	at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:550) ~[HikariCP-5.1.0.jar:na]
app-1    | 	at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:98) ~[HikariCP-5.1.0.jar:na]
app-1    | 	at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:111) ~[HikariCP-5.1.0.jar:na]
app-1    | 	at org.flywaydb.core.internal.jdbc.JdbcUtils.openConnection(JdbcUtils.java:48) ~[flyway-core-10.10.0.jar:na]
app-1    | 	... 100 common frames omitted
app-1    |
app-1 exited with code 1

app.env

SPRING_PROFILES_ACTIVE=prod
SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/codechella_db
SPRING_DATASOURCE_USERNAME=root
SPRING_DATASOURCE_PASSWORD=pa55word
MAIL_HOST=smtp.gmail.com
MAIL_USER=testings.boot@gmail.com
MAIL_PASSWORD=khcraohk
APP_JWT_SECRET=jwt_secret

mysql.env

MYSQL_RANDOM_ROOT_PASSWORD=true
MYSQL_DATABASE=codechella_db
MYSQL_USER=root
MYSQL_PASSWORD=pa55word

Questões adicionais:

  1. Porquê a excepção FlywaySqlException uma vez que estou a trabalhar com o banco de dados MySQL?
  2. Porquê preciso criar um User Root com uma senha aleatória (MYSQL_RANDOM_ROOT_PASSWORD=true) se eu já estou a criar explicitamente um user?
10 respostas

Oi!

Ocorre erro FlywaySqlException, pois o flyway tenta rodar as migrations do projeto no MySQL, mas não consegue se conectar no banco com os dados informados.

Nos seus arquivos .env não utilize o usuário root no banco de dados e sim outro. Exemplo:

SPRING_PROFILES_ACTIVE=prod
SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/codechella_db
SPRING_DATASOURCE_USERNAME=codechella_user
SPRING_DATASOURCE_PASSWORD=pa55word
MAIL_HOST=smtp.gmail.com
MAIL_USER=testings.boot@gmail.com
MAIL_PASSWORD=khcraohk
APP_JWT_SECRET=jwt_secret
MYSQL_RANDOM_ROOT_PASSWORD=true
MYSQL_DATABASE=codechella_db
MYSQL_USER=codechella_user
MYSQL_PASSWORD=pa55word

Obrigado Rodrigo.

Tentei trocar o user, mas o erro prevalece:

SQL State  : 28000
Error Code : 1045
Message    : Access denied for user 'codechella_user'@'172.20.0.3' (using password: YES)

Uma dúvida: as credencias do banco de dados no container têm alguma relação com as credenciais do banco na máquina local?

São credenciais distitnas mesmo.

Mande aqui o código dos seus arquivos: application-prod.properties e docker-compose.yml

Ohh, obrigado. Envio a seguir o código dos arquivos solicitados.

application-prod.properties:

spring.datasource.url=${SPRING_DATASOURCE_URL}
spring.datasource.username=${SPRING_DATASOURCE_USERNAME}
spring.datasource.password=${SPRING_DATASOURCE_PASSWORD}

spring.jpa.show-sql=false
spring.jpa.properties.hibernate.format_sql=false

spring.mail.host=${MAIL_HOST}
spring.mail.username=${MAIL_USER}
spring.mail.password=${MAIL_PASSWORD}
spring.mail.port=587
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true

app.security.jwt.secret=${APP_JWT_SECRET}

docker-compose.yml:

version: '3'
services:
  mysql:
    image: mysql:8.0.36
    env_file: ./env/mysql.env
    volumes:
      - ./mysql-data:/var/lib/mysql
    restart: unless-stopped
    healthcheck:
      test: mysqladmin ping -h 127.0.0.1 -u $$MYSQL_USER --password=$$MYSQL_PASSWORD
      interval: 5s
      timeout: 5s
      retries: 10

  app:
    build:
      context: .
    env_file: ./env/app.env
    restart: unless-stopped
    depends_on:
      mysql:
        condition: service_healthy

volumes:
  mysql-data:

Tem estas três Excepções nos logs, acompanhando o erro Access denied for user 'root'@'172.20.0.3' (using password: YES), que podem ajudar no diagnóstico.

  1. org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'usuarioRepository' defined in br.com.alura.codechella.domain.autenticacao.repository.UsuarioRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Cannot resolve reference to bean 'jpaSharedEM_entityManagerFactory' while setting bean property 'entityManager'

  2. org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Unable to obtain connection from database: Access denied for user 'root'@'172.20.0.3' (using password: YES)

  3. org.flywaydb.core.internal.exception.FlywaySqlException: Unable to obtain connection from database: Access denied for user 'root'@'172.20.0.3' (using password: YES)

As configurações estão corretas.

O MySQL parece que está subindo via Docker, mas a API não consegue se conectar nele. Rode o seguinte comando no seu terminal, depois de subir o docker compose, e manda aqui um print:

docker compose ps

Tente também se conectar diretamente no mysql via terminal:

docker-compose exec mysql mysql -u codechella_user -ppa55word

Depois de emitir o docker compose up --build, enquanto a applicação tentava subir, emiti os dois comandos que propôs e os resultados foram os seguintes:

docker compose ps

NAME               IMAGE          COMMAND                  SERVICE   CREATED          STATUS                    PORTS
arquipro-app-1     arquipro-app   "java org.springfram…"   app       40 seconds ago   Up 7 seconds
arquipro-mysql-1   mysql:8.0.36   "docker-entrypoint.s…"   mysql     18 hours ago     Up 39 seconds (healthy)   3306/tcp, 33060/tcp

docker-compose exec mysql mysql -u codechella_user -p pa55word

docker-compose exec mysql mysql -u codechella_user -p pa55word
Enter password:
ERROR 1045 (28000): Access denied for user 'codechella_user'@'localhost' (using password: YES)

Após o Enter password: introduzi a mesma senha e depois foi lançado o erro 1045.

Informação adicional:

  1. Ao emitir o comando docker run e1000son/codechella:2.0, recebo a Excepção Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure:
SQL State  : 08S01
Error Code : 0
Message    : Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
  1. Ao emitir o comando docker compose up --build, a aplicação entra no ciclo de tentativa de arranque, porém alternando entre exited with code 0 e exited with code 1, mas a interrupção ocorre com o mesmo erro:

Access denied for user 'codechella_user'@'172.20.0.3' (using password: YES)

app-1 exited with code 0

app-1    | 	at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:550) ~[HikariCP-5.1.0.jar:na]
app-1    | 	at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:98) ~[HikariCP-5.1.0.jar:na]
app-1    | 	at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:111) ~[HikariCP-5.1.0.jar:na]
app-1    | 	at org.flywaydb.core.internal.jdbc.JdbcUtils.openConnection(JdbcUtils.java:48) ~[flyway-core-10.10.0.jar:na]
app-1    | 	... 100 common frames omitted
app-1    |
app-1 exited with code 0
app-1    |
app-1    |   .   ____          _            __ _ _
app-1    |  /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
app-1    | ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
app-1    |  \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
app-1    |   '  |____| .__|_| |_|_| |_\__, | / / / /
app-1    |  =========|_|==============|___/=/_/_/_/
app-1    |
app-1    |  :: Spring Boot ::                (v3.3.1)
app-1    |
app-1    | 2024-12-18T09:29:52.296Z  INFO 1 --- [           main] b.c.a.codechella.CodechellaApplication   : Starting CodechellaApplication v1.0 using Java 21.0.5 with PID 1 (/application/BOOT-INF/classes started by root in /application)
app-1    | 2024-12-18T09:29:52.302Z  INFO 1 ---

app-1 exited with code 1

app-1    | 	at org.flywaydb.core.internal.jdbc.JdbcUtils.openConnection(JdbcUtils.java:48) ~[flyway-core-10.10.0.jar:na]
app-1    | 	... 100 common frames omitted
app-1    |
app-1 exited with code 1
app-1    |
app-1    |   .   ____          _            __ _ _
app-1    |  /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
app-1    | ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
app-1    |  \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
app-1    |   '  |____| .__|_| |_|_| |_\__, | / / / /
app-1    |  =========|_|==============|___/=/_/_/_/
app-1    |
app-1    |  :: Spring Boot ::                (v3.3.1)
app-1    |
app-1    | 2024-12-18T09:31:36.881Z  INFO 1 --- [           main] b.c.a.codechella.CodechellaApplication   : Starting CodechellaApplication v1.0 using Java 21.0.5 with PID 1 (/application/BOOT-INF/classes started by root in /application)
solução!

Parece ser algum problema no MySQL, pois nem no terminal ele aceita login com o usuario codechella_user.

Tenta então com o usuário root, alterando os arquivos .env:

mysql.env

MYSQL_ROOT_PASSWORD=pa55word
MYSQL_DATABASE=codechella_db

app.env

SPRING_PROFILES_ACTIVE=prod
SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/codechella_db
SPRING_DATASOURCE_USERNAME=root
SPRING_DATASOURCE_PASSWORD=pa55word
MAIL_HOST=smtp.gmail.com
MAIL_USER=testings.boot@gmail.com
MAIL_PASSWORD=khcraohk
APP_JWT_SECRET=jwt_secret

Altera também no docker-compose.yml a linha d o healthcheck test para:

test: mysqladmin ping -h 127.0.0.1 -u root --password=$$MYSQL_ROOT_PASSWORD

E antes de subir o docker compose, apague a sua pasta de volume do mysql:

sudo rm -rf mysql-data

Oi Beltone,

Remova o espaço em: -ppa55word

docker-compose exec mysql mysql -u codechella_user -ppa55word

Se não funcionar, verifique as variáveis de ambiente:

docker-compose exec mysql printenv

O mais importante! Siga as instruções do Rodrigo corretamente

Boa sorte! 🍀

Muito obrigado Rodrigo e Luís. Finalmente consegui ultrapassar o problema.

Os comentários neste link também foram úteis: stackoverflow.com/mysql-docker-container-keeps-restarting