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
ステップ1:SELECT version();
queryを使用して、現在のMysqlのバージョンを確認します。
ステップ2:MySQL jdbcドライバーのバージョンまたはMavenのMysql依存関係を確認します。
ステップ3:jarバージョンまたはMysqlのMaven依存バージョンをアップグレードします。
この問題は、以下の手順を使用して修正できます。
ステップ1-mysqlで以下のクエリを実行し、再起動します(バージョン> 8.0の場合、ユーザー名はここにルートです)
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>
ステップ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」である必要があります。
私はメッセージが示唆することをしました。私はpom.xml
:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-Java</artifactId>
<version>5.1.18</version>
</dependency>
最新バージョン に変更されました:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-Java</artifactId>
<version>8.0.12</version>
</dependency>
プロジェクトのlibフォルダーにあるmysql-connector-Java-version.jar(例:mysql-connector-Java-8.0.11.jar)を確認し、それに応じてアップグレードします。
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)
Mysql-connector-Javaを最新バージョンに更新するだけで、他に何も必要ありません
問題はmysql-connector-Javaバージョン5.1.6にあります。バージョン5.1.44にアップグレードしてみてください。私のために働いた。次の依存バージョンを使用しました。
compile group: 'mysql', name: 'mysql-connector-Java', version: '5.1.44'