web-dev-qa-db-ja.com

MySQLNonTransientConnectionException:クライアントは、サーバーから要求された認証プロトコルをサポートしていません。 MySQLクライアントのアップグレードを検討する

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   
8
sirajnadwar

ステップ1:SELECT version(); queryを使用して、現在のMysqlのバージョンを確認します。

ステップ2:MySQL jdbcドライバーのバージョンまたはMavenのMysql依存関係を確認します。

ステップ3:jarバージョンまたはMysqlのMaven依存バージョンをアップグレードします。

7
suraz

この問題は、以下の手順を使用して修正できます。

ステップ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」である必要があります。

4
kartik kumar

私はメッセージが示唆することをしました。私は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>
1
KinGamer

プロジェクトのlibフォルダーにあるmysql-connector-Java-version.jar(例:mysql-connector-Java-8.0.11.jar)を確認し、それに応じてアップグレードします。

1
parvinB

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)
1
rajesh

POM.XMLファイルのバージョンを更新するだけで、問題がクライアントバージョンのみに関する場合は、最新バージョンをアップグレードするだけで、プロジェクトをクリーンアップします。成功しました。

0
shubham

Mysql-connector-Javaを最新バージョンに更新するだけで、他に何も必要ありません

0
uday

問題はmysql-connector-Javaバージョン5.1.6にあります。バージョン5.1.44にアップグレードしてみてください。私のために働いた。次の依存バージョンを使用しました。

compile group: 'mysql', name: 'mysql-connector-Java', version: '5.1.44'
0
Aman Gupta