【问题标题】:MySQLNonTransientConnectionException: Client does not support authentication protocol requested by server; consider upgrading MySQL client [duplicate]MySQLNonTransientConnectionException:客户端不支持服务器请求的认证协议;考虑升级 MySQL 客户端 [重复]
【发布时间】:2018-11-03 10:15:22
【问题描述】:
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Client does not support authentication protocol requested by server; consider upgrading MySQL client
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
    at com.mysql.jdbc.Util.getInstance(Util.java:381)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3558)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3490)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:919)
    at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3996)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1284)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2137)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:776)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:352)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:284)
    at java.sql/java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql/java.sql.DriverManager.getConnection(Unknown Source)
    at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:154)
    at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriver(DriverManagerDataSource.java:145)
    at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:205)
    at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:169)
    at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:180)
    at org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl.getIsolatedConnection(DdlTransactionIsolatorNonJtaImpl.java:43)

即使在更新 mysql 密码后,我也会收到此错误。我在一些帖子中读到 mysql 有一个新的缓存机制,所有客户端都需要运行以下我已经做过但仍然相同的错误:

 update user set authentication_string='test' where user='root';
 flush privileges   

【问题讨论】:

  • 请检查依赖的版本和安装的mysql服务器。
  • 是的,你说得对。问题出现在 8.11 版本的 mysql 服务器上。当我切换到 5.7 版本时,问题就消失了
  • 很好,有帮助!
  • 尝试以下答案中建议的解决方案。 https://stackoverflow.com/a/50131831/2210710

标签: java mysql spring tomcat


【解决方案1】:

第 1 步:使用 SELECT version(); 查询检查当前 Mysql 的版本。

第2步:检查你的maven中Mysql jdbc驱动或Mysql依赖的版本。

第三步:升级Mysql的jar版本或者maven依赖版本。

【讨论】:

    【解决方案2】:

    这个问题可以通过以下步骤解决:-

    第 1 步:- 在 mysql 中运行以下查询并重新启动它(对于 >8.0 版本,这里的用户名是 root)

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

    第 2 步:- 通过运行 select version() 检查 mysql 的版本;在mysql中

     the version of mysql in pom.xml should be same as the version of mysql installed (mine is 8.0.14)
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.14</version>
    

    步骤 3:-如果 mysql-connector jar 文件不在 maven 存储库中,您可以下载 8.0.14 版本的 jar 并将其粘贴到存储库中

    $\.m2\repository\mysql\mysql-connector-java\8.0.14

    第 4 步:- 更新您的 maven 项目

    步骤 5:- 检查 config.xml 中的 driverClassName,它应该是“com.mysql.cj.jdbc.Driver”。

    【讨论】:

    • ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpassword';这对我有用!
    • 我遇到了同样的问题,这对我有用
    • 同样,第 5 步对我来说至关重要,我有“com.mysql.jdbc.Driver”
    【解决方案3】:

    我已经按照消息的建议做了。我在pom.xml:

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.18</version>
    </dependency>
    

    并改为latest version:

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.12</version>
    </dependency>
    

    【讨论】:

      【解决方案4】:

      检查项目的 lib 文件夹中的 mysql-connector-java-version.jar(例如:mysql-connector-java-8.0.11.jar)并相应升级。

      【讨论】:

        【解决方案5】:

        您必须使用 MySQL 的 OLD_PASSWORD 函数更新数据库用户的密码。 SOLUTION

        例如:

        [rajesh-tpl-01@home ~]$ mysql -u root -p mysql
        Enter password:
        
        mysql> update user set password=OLD_PASSWORD('password') WHERE 
        user='username';
        Query OK, 0 rows affected (0.02 sec)
        Rows matched: 0  Changed: 0  Warnings: 0
        
        mysql> flush privileges;
        Query OK, 0 rows affected (0.00 sec)
        

        【讨论】:

          【解决方案6】:

          只需将你的 mysql-connector-java 更新到最新版本,不需要任何其他东西

          【讨论】:

          • 实际上这就是导致问题的原因
          【解决方案7】:

          问题在于 mysql-connector-java 版本 5.1.6。尝试升级到版本 5.1.44。为我工作。我使用了以下依赖版本:

          compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.44'
          

          【讨论】:

          • 5.1.6 是早期版本。切换到 5.1.44 将是升级
          【解决方案8】:

          只需更新 POM.XML 文件中的版本,如果问题仅与客户端版本有关,只需升级最新版本 -> 然后清理项目。 运行成功了。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-03-19
            • 2018-10-10
            • 2018-10-29
            • 2023-03-05
            • 2018-12-11
            相关资源
            最近更新 更多