代码之家  ›  专栏  ›  技术社区  ›  RamAlx

使用JDBC时出现MySQL连接错误

  •  1
  • RamAlx  · 技术社区  · 7 年前

    我有一个非常严重的问题,我不能继续我的任务两天知道。我使用docker和mysql服务器。我有docker-compose.yml文件:

    version: '2'
    services:
      mongoDb:
        image: mongo:latest
        container_name: myproject-mongodb
        ports:
          - "27017:27017"
    
      mssql:
        image: mysql/mysql-server:8.0
        container_name: myproject-mysql
        ports:
          - "3306:3306"
        environment:
          MYSQL_ROOT_PASSWORD: 'pass'
          MYSQL_DATABASE: 'myproject'
          MYSQL_USER: 'myproject'
          MYSQL_PASSWORD: 'alex1234!'
    

    正在成功创建Docker映像。使用dbeaver客户端,我当然使用mysql驱动程序和确切的凭据来设置连接: 服务器主机:localhost 端口:3306 数据库:myproject 用户名:myproject 密码:“alex1234!” 此外,我在驱动程序属性中将allowPublickeyRetrieval设置为true,并建立连接。 现在在application.properties文件中的intellij中,我有完全相同的东西:

    #MySql WebMvcConfiguration.java
    spring.datasource.url=jdbc:mysql://localhost:3306/myproject?allowPublicKeyRetrieval=true
    spring.datasource.username=myproject
    spring.datasource.password=alex1234!
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    hibernate.dialect = org.hibernate.dialect.MySQLDialect
    hibernate.show_sql = true
    

    当我运行应用程序时,我面临这个错误:

    Authentication plugin 'caching_sha2_password' cannot be loaded
    

    为什么会这样?我也尝试了一些解决办法 ALTER USER 'username'@'ip_address' IDENTIFIED WITH mysql_native_password By 'password'; 但什么都没有。请帮助

    1 回复  |  直到 7 年前
        1
  •  2
  •   fly2matrix    7 年前

    在mysql 8.0中,caching_sha2_password是默认的身份验证插件,而不是mysql_native_password。有关此更改对服务器操作的影响以及服务器与客户端和连接器的兼容性的信息,请参阅将“缓存”sha2“密码作为首选身份验证插件- https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password

    您在Docker Images中使用的是MySQL8,它有不同的身份验证实现。

    请参阅以下链接中的缓存密码更改

    所以暂时试着把mysql版本降到5.7。 另一方面,请浏览链接,以便对mysql-8使用正确的步骤。请查看JDBC连接器的以下链接。 https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password-compatible-connectors