Java MySQLNonTransientConnectionException: 客户端不支持服务器请求的认证协议;考虑升级 MySQL 客户端
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/50505042/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
MySQLNonTransientConnectionException: Client does not support authentication protocol requested by server; consider upgrading MySQL client
提问by sirajnadwar
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)
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:
即使在更新 mysql 密码后,我也会收到此错误。我在一些帖子中读到 mysql 有一个新的缓存机制,所有客户端都需要运行我已经做过但仍然相同的错误:
update user set authentication_string='test' where user='root';
flush privileges
回答by rajesh
You have to update the database user's password using the OLD_PASSWORD function of MySQL. SOLUTION
您必须使用 MySQL 的 OLD_PASSWORD 函数更新数据库用户的密码。 解决方案
For example:
例如:
[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)
回答by parvinB
check your mysql-connector-java-version.jar(ex: mysql-connector-java-8.0.11.jar) in the lib folder of your project and upgrade accordingly.
检查您项目的 lib 文件夹中的 mysql-connector-java-version.jar(例如:mysql-connector-java-8.0.11.jar)并相应升级。
回答by uday
Just update u r mysql-connector-java to latest version no need any thing else
只需将您的 mysql-connector-java 更新到最新版本,无需任何其他操作
回答by Aman Gupta
The issue is with mysql-connector-java version 5.1.6. Try upgrading to version 5.1.44. Worked for me. I used the following dependency version:
问题在于 mysql-connector-java 5.1.6 版。尝试升级到版本 5.1.44。为我工作。我使用了以下依赖版本:
compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.44'
回答by KinGamer
I've done what the message suggests. I had in pom.xml
:
我已经按照消息的建议做了。我有pom.xml
:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.18</version>
</dependency>
and changed to the latest version:
并更改为最新版本:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.12</version>
</dependency>
回答by shubham
回答by suraz
Step 1: Check the version of your current Mysql using: SELECT version();
query.
第 1 步:使用:SELECT version();
query检查当前 Mysql 的版本。
step 2: Check the version of Mysql jdbc driver or Mysql dependency in your maven.
第二步:在你的maven中检查Mysql jdbc驱动或者Mysql依赖的版本。
step 3: Upgrade the jar version or the maven dependency version for Mysql.
第三步:升级Mysql的jar版本或者maven依赖版本。
回答by kartik kumar
this issue can be rectified using below steps:-
可以使用以下步骤纠正此问题:-
step 1 :- run below query in mysql and restart it (for version >8.0 ,username is root here)
第 1 步:- 在 mysql 中运行以下查询并重新启动它(对于版本 >8.0,此处的用户名是 root)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpassword';
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpassword';
step 2:- check the version of your mysql by running select version(); in mysql
第 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>
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
第3步:-如果maven存储库中没有mysql-connector jar文件,您可以下载8.0.14版本的jar并将其粘贴到存储库中
$\.m2\repository\mysql\mysql-connector-java\8.0.14
$\.m2\repository\mysql\mysql-connector-java\8.0.14
step 4:- update your maven project
第 4 步:- 更新您的 Maven 项目
step 5:- check for driverClassName in config.xml, it should be "com.mysql.cj.jdbc.Driver".
第 5 步:- 检查 config.xml 中的 driverClassName,它应该是“com.mysql.cj.jdbc.Driver”。