MySQLNonTransientConnectionException:客户端不支持服务器请求的身份验证协议;考虑升级MySQL客户端 [英] MySQLNonTransientConnectionException: Client does not support authentication protocol requested by server; consider upgrading MySQL client
问题描述
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具有新的缓存机制,所有客户端都需要运行我已经执行的以下操作,但仍会出现相同的错误:
I get this error even after updating mysql password. I read in some posts that mysql has a new caching mechanism and all clients need to run the following which I already did but still the same error:
update user set authentication_string='test' where user='root';
flush privileges
推荐答案
可以使用以下步骤纠正此问题:-
this issue can be rectified using below steps:-
第1步:-在mysql中运行以下查询并重新启动(对于版本> 8.0,用户名在此处为root)
step 1 :- run below query in mysql and restart it (for version >8.0 ,username is root here)
使用"yourpassword"通过mysql_native_password标识ALTER USER'root'@'localhost';
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpassword';
步骤2:-通过运行select version()检查mysql的版本;在mysql中
step 2:- check the version of your mysql by running select version(); in 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步:-如果maven存储库中没有mysql-connector jar文件,则可以下载8.0.14版本的jar并将其粘贴到存储库中
step 3:-if the mysql-connector jar file is not there in maven repository you can download the 8.0.14 version jar and can paste it in repository
$ \.m2 \ repository \ mysql \ mysql-connector-java \ 8.0.14
$\.m2\repository\mysql\mysql-connector-java\8.0.14
第4步:-更新您的Maven项目
step 4:- update your maven project
步骤5:-检查config.xml中的driverClassName,它应该是"com.mysql.cj.jdbc.Driver".
step 5:- check for driverClassName in config.xml, it should be "com.mysql.cj.jdbc.Driver".
这篇关于MySQLNonTransientConnectionException:客户端不支持服务器请求的身份验证协议;考虑升级MySQL客户端的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!