MySQLNonTransientConnectionException:客户端不支持服务器请求的身份验证协议;考虑升级MySQL客户端

sir*_*war 10 java mysql spring tomcat

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)
Run Code Online (Sandbox Code Playgroud)

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

 update user set authentication_string='test' where user='root';
 flush privileges   
Run Code Online (Sandbox Code Playgroud)

小智 9

步骤1:使用以下SELECT version();查询检查当前Mysql的版本:

步骤2:在您的Maven中检查Mysql jdbc驱动程序的版本或Mysql依赖项。

步骤3:升级Mysql的jar版本或maven依赖版本。


小智 5

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

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.18</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

并更改为最新版本

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.12</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)


小智 5

可以使用以下步骤纠正此问题:

步骤1:-在mysql中运行以下查询并重新启动(对于版本> 8.0,用户名在此处为root)

ALTER USER'root'@'localhost'由mysql_native_password标识为'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>
Run Code Online (Sandbox Code Playgroud)

步骤3:-如果Maven存储库中没有mysql-connector jar文件,则可以下载8.0.14版本的jar并将其粘贴到存储库中

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

步骤4:-更新您的Maven项目

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


raj*_*esh 1

您必须使用 MySQL 的 OLD_PASSWORD 函数更新数据库用户\xe2\x80\x99s 密码。\n解决方案

\n\n

例如:

\n\n
[rajesh-tpl-01@home ~]$ mysql -u root -p mysql\nEnter password:\n\nmysql> update user set password=OLD_PASSWORD(\'password\') WHERE \nuser=\'username\';\nQuery OK, 0 rows affected (0.02 sec)\nRows matched: 0  Changed: 0  Warnings: 0\n\nmysql> flush privileges;\nQuery OK, 0 rows affected (0.00 sec)\n
Run Code Online (Sandbox Code Playgroud)\n