Fixing the Java.sql.SQLException: Step-by-Step Guide to Resolve the Unable to Load Authentication Plugin Caching_sha2_Password Error

In this guide, we will walk through the process of resolving the java.sql.SQLException error, specifically the "Unable to load authentication plugin 'caching_sha2_password'" issue. This error commonly occurs when attempting to connect to a MySQL 8.0 server using a JDBC driver that doesn't support the new caching_sha2_password authentication plugin, which is the default authentication method in MySQL 8.0.

Table of Contents


Before diving into the solution, make sure you have the following:

  • Java Development Kit (JDK) installed (version 8 or higher).
  • MySQL server installed (version 5.7 or higher).
  • A Java project that uses a JDBC driver to connect to a MySQL database.

Step 1: Check Your MySQL Server Version

First, verify your MySQL server version by running the following command in the MySQL command line or a terminal:


If the version is 8.0 or higher, continue with the next steps.

Step 2: Update Your JDBC Driver

To resolve the error, you'll need to update your JDBC driver to a version that supports the caching_sha2_password authentication plugin. The MySQL Connector/J 8.0 is recommended for this purpose.

  1. Download the latest version of the MySQL Connector/J from the official website.
  2. Replace the existing JDBC driver JAR file in your Java project with the new JAR file you just downloaded.

Step 3: Change the Authentication Plugin

If updating the JDBC driver doesn't resolve the issue or you want to use the older mysql_native_password authentication method, you can change the authentication plugin for a specific user. Run the following command in the MySQL command line or a terminal:

ALTER USER 'your_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';

Replace your_user and your_password with the appropriate username and password.

Step 4: Configure the JDBC Connection String

Lastly, update your JDBC connection string in your Java project to include the allowPublicKeyRetrieval=true and useSSL=false parameters, as shown below:

String url = "jdbc:mysql://localhost:3306/your_database?allowPublicKeyRetrieval=true&useSSL=false";

Replace your_database with the name of your MySQL database.

Now, recompile and run your Java project. The java.sql.SQLException error should be resolved.


What is the caching_sha2_password authentication plugin?

The caching_sha2_password is an authentication plugin introduced in MySQL 8.0, which provides better security and faster authentication compared to the older mysql_native_password plugin. Learn more.

How do I check the authentication plugin used by a MySQL user?

To check the authentication plugin used by a particular user, run the following command in the MySQL command line or a terminal:

SELECT user, plugin FROM mysql.user WHERE user = 'your_user';

Replace your_user with the username you want to check.

Can I use the caching_sha2_password plugin with older MySQL versions?

No, the caching_sha2_password plugin is only available in MySQL 8.0 and later versions.

What should I do if I still encounter the java.sql.SQLException error after following these steps?

If you still encounter the error, double-check your JDBC driver version, JDBC connection string, and the authentication plugin for the user. If the issue persists, consider seeking help from the MySQL community or StackOverflow.

Are there any security concerns when using allowPublicKeyRetrieval=true and useSSL=false in the JDBC connection string?

Yes, using allowPublicKeyRetrieval=true can expose the user's password, and using useSSL=false can expose data in transit. These parameters should not be used in production environments. Instead, configure your MySQL server to use SSL/TLS and avoid using allowPublicKeyRetrieval=true. Learn more.

Great! You’ve successfully signed up.

Welcome back! You've successfully signed in.

You've successfully subscribed to

Success! Check your email for magic link to sign-in.

Success! Your billing info has been updated.

Your billing was not updated.