JusDB
Free DB Audit
MySQL

MySQL 8.4 Authentication Errors: mysql_native_password and caching_sha2_password Fixes

Fix MySQL 8.4 authentication errors: why mysql_native_password is not loaded, what caching_sha2_password needs, which drivers work, and how to migrate before 9.x.

JusDB Team
Published October 21, 2026
Updated November 9, 2026
20 min read

You upgraded to MySQL 8.4 LTS, and a deploy script now stops with ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded. Or an application that worked for years fails with Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection, but only after a restart. Both come from one change. MySQL 8.4 ships with the old mysql_native_password plugin turned off, and MySQL 9.0 removed it from the server. Every account, connector, proxy, and replication channel now has to speak caching_sha2_password, which needs TLS or an RSA key exchange the first time an account authenticates. This guide maps each error string to its cause, shows how to find the affected accounts, and gives a migration runbook to finish before you move to the 9.7 LTS series.

TL;DR
  • mysql_native_password was deprecated in 8.0.34, is disabled by default in 8.4, and was removed in 9.0.0. --mysql-native-password=ON re-enables it on 8.4 only.
  • "Authentication requires secure connection" means a caching_sha2_password account missed the server's cache and the client had neither TLS nor the server's RSA public key.
  • Find native accounts with SELECT user, host FROM mysql.user WHERE plugin = 'mysql_native_password', then check each client's connector version.
  • Migrate each account with ALTER USER ... IDENTIFIED WITH caching_sha2_password BY '...'. You need the password: the old hash cannot be converted.
  • Replicas need SOURCE_SSL=1 or GET_SOURCE_PUBLIC_KEY=1; Group Replication members need the matching group_replication_recovery_* settings.

Scope and review date: November 2026. This post covers MySQL Community Server 8.0, 8.4 LTS, and the 9.x series up to 9.7.4 LTS, with notes for Amazon Aurora MySQL 8.4. Commands, error strings, and version numbers were checked against MySQL, connector, and proxy documentation on 9 November 2026. They were not run in a lab, so rehearse them on staging first.


What changed in MySQL 8.4 and 9.x authentication?

MySQL 8.0 made caching_sha2_password the default plugin for new accounts but left existing accounts alone. Many teams upgraded from 5.7 and kept every application user on mysql_native_password. That was fine until 8.4.

The MySQL 8.4 manual states it plainly: the plugin "is deprecated as of MySQL 8.0.34, disabled by default in MySQL 8.4, and removed as of MySQL 9.0.0." The 8.4 "What Is New" page also removes the default_authentication_plugin variable, so a 5.7-era my.cnf line that set it now stops the server from starting. The replacement is authentication_policy; when its first element is *, new accounts get caching_sha2_password.

Authentication defaults in MySQL 8.0, 8.4, and 9.x

Switch versions to see what your accounts and config files will meet

MySQL 8.0

ItemMySQL 8.0
Default plugin for new accountscaching_sha2_password, set by default_authentication_plugin
Server-side mysql_native_passwordEnabled; deprecated from 8.0.34
default_authentication_pluginAvailable; deprecated from 8.0.27
Existing native accountsLog in as before
GET_MASTER_PUBLIC_KEY keywordAccepted
Client-side native pluginBuilt into libmysqlclient

MySQL 8.4 LTS

ItemMySQL 8.4 LTS
Default plugin for new accountscaching_sha2_password, set by authentication_policy
Server-side mysql_native_passwordDisabled by default; --mysql-native-password=ON enables it
default_authentication_pluginRemoved; use authentication_policy
Existing native accountsFail to log in unless the plugin is enabled
GET_MASTER_PUBLIC_KEY keywordRemoved; use GET_SOURCE_PUBLIC_KEY
Client-side native pluginBuilt into libmysqlclient

MySQL 9.x

ItemMySQL 9.0 to 9.7 LTS
Default plugin for new accountscaching_sha2_password, set by authentication_policy
Server-side mysql_native_passwordRemoved in 9.0.0, with the --mysql-native-password option
default_authentication_pluginRemoved; use authentication_policy
Existing native accountsNo server plugin to authenticate them; migrate before the upgrade
GET_MASTER_PUBLIC_KEY keywordRemoved; use GET_SOURCE_PUBLIC_KEY
Client-side native pluginKept, but now a dynamically loadable plugin

8.4 is the last stop: the 9.0.0 release notes remove the plugin and the option that turns it on, so there is no switch to fall back on after 8.4.

Start by checking which plugin your current session and the server default use:

sql
-- Which plugin did this session's account use?
SELECT CURRENT_USER(), plugin
FROM mysql.user
WHERE CONCAT(user, '@', host) = CURRENT_USER();

-- What will new accounts get?
SELECT @@GLOBAL.authentication_policy;

Interpretation: if the first element of authentication_policy is * or names caching_sha2_password, new accounts are created on the new plugin. Old accounts keep whatever plugin they had when they were created, which is why the problem hides until an upgrade.

MySQL 9.7 is the next LTS series after 8.4 (9.7.0 shipped on 21 April 2026, and 9.7.4 on 20 October 2026, per the 9.7 release notes). The release model page says you can go from 8.4 LTS to 9.7 LTS but cannot skip an LTS series, so every 8.4 estate meets this change on its next major upgrade.

Why does MySQL 8.4 say "Plugin 'mysql_native_password' is not loaded"?

Because the plugin is built into the 8.4 server but switched off. With it off, two things fail. Accounts that authenticate with it cannot log in: the manual shows the client getting a plain ERROR 1045 (28000): Access denied while the server writes the reason to its error log. And any CREATE USER or ALTER USER that names the plugin fails with error 1524. Provisioning scripts, Ansible roles, and Terraform modules written for 5.7 hit the second case first.

Two MySQL 8.4 authentication errors and the documented fixes

Output from the MySQL 8.4 manual; the last command is the documented RSA fix, and its output is not shown

mysql 8.4 client
mysql> ALTER USER userxy@localhost IDENTIFIED WITH 'mysql_native_password';ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded $ mysql --ssl-mode=DISABLED -u sha2user -pERROR 2061 (HY000): Authentication plugin 'caching_sha2_password'reported error: Authentication requires secure connection. $ mysql --ssl-mode=DISABLED -u sha2user -p --get-server-public-key

Two different fixes: error 1524 goes away when the account uses caching_sha2_password; error 2061 goes away with TLS or an RSA key. Both errors are quoted from the 8.4 caching SHA-2 and native authentication pages.

The temporary bridge: --mysql-native-password=ON

If you need old accounts working today, 8.4 accepts a startup option, added in 8.4.0. It is a bridge for the 8.4 series only: the option itself is removed in 9.0.0.

ini
# /etc/my.cnf on MySQL 8.4 only. Remove before any 9.x upgrade.
[mysqld]
mysql_native_password=ON

Interpretation: after a restart, existing native accounts log in again and CREATE USER ... IDENTIFIED WITH mysql_native_password works. Treat this line as a dated exception in your change log, and set a date to remove it. To keep the plugin off, omit the option; OFF also works but is not required.

Do not carry 8.0 settings forward

A leftover default_authentication_plugin=mysql_native_password line is an unknown variable on 8.4, and the server refuses to start. Search every option file, including /etc/mysql/conf.d/ and container entrypoint flags, before the binaries change.

How do I fix "Authentication requires secure connection"?

This is error 2061, and it only affects caching_sha2_password accounts. The plugin keeps an in-memory cache of accounts that have logged in. A cache hit uses a challenge-response exchange that, in the manual's words, "does not use cleartext password transmission and does not require a secure connection." A cache miss needs full authentication. The client must then send the password over a secure channel or encrypt it with the server's RSA public key. If it can do neither, you get 2061.

How caching_sha2_password authenticates a connection

A cache hit takes the fast path; a miss needs TLS, a socket, or the RSA key

caching_sha2_password fast path and full authentication Step 1: the client connects and the server checks its in-memory cache of account and password hash pairs. Step 2: on a cache hit, the server uses a challenge-response exchange that needs no secure connection. Step 3: on a cache miss, full authentication runs, and the password must travel over TLS, a Unix socket, or shared memory, or be encrypted with the server's RSA public key. Step 4: the server verifies the password against mysql.user and adds the account to the cache. The cache is emptied at shutdown and by FLUSH PRIVILEGES, and entries are cleared when an account is renamed, dropped, or given a new password or plugin. Client connects Server cache account and hash Fast path challenge-response Full auth TLS, socket, or RSA mysql.user verify, then cache 1 2 3 4 cache hit cache miss misses follow a restart, FLUSH PRIVILEGES, or a password change

Why it fails "randomly": after a restart the cache is empty. Clients without TLS or the RSA key fail until something else, such as an admin on the local socket, logs in as that account and refills the cache.

That last point explains a common report: the application fails after a restart, an engineer logs in with the mysql client to investigate, and the application starts working. The engineer's login over a Unix socket counted as secure, filled the cache, and the application then took the fast path. Nothing was fixed. The next restart or FLUSH PRIVILEGES brings the failure back.

There are three real fixes, in order of preference:

  1. Use TLS. Encrypted TCP, Unix socket files, and shared memory all count as secure, so no RSA key is needed.
  2. Give the client a trusted copy of the public key (--server-public-key-path, or the connector's equivalent).
  3. Let the client request the key (--get-server-public-key). The manual calls this more convenient but less secure than a local copy, and says it "may be acceptable in secure network environments."
bash
# Prefer TLS: fail rather than fall back to plain text
mysql --ssl-mode=REQUIRED -h db-01 -u app_user -p

# No TLS: use a trusted local copy of the server's public key
mysql --ssl-mode=DISABLED -h db-01 -u app_user -p \
  --server-public-key-path=/etc/mysql/keys/db-01_public_key.pem

Interpretation: if the first command succeeds after a fresh restart, the account and client are ready for full authentication. If only the socket login works, the TCP path has no TLS and no key, and the application will fail on its next cold cache.

sql
-- On the server: is an RSA key loaded, and is this session encrypted?
SHOW STATUS LIKE 'Caching_sha2_password_rsa_public_key';
SHOW SESSION STATUS LIKE 'Ssl_cipher';

Interpretation: an empty Caching_sha2_password_rsa_public_key value means the server found a problem with its key files; the manual says to check the error log. An empty Ssl_cipher means the current session is not using TLS.

What does "Authentication plugin cannot be loaded" mean?

Error 2059 is raised by the client, not the server. The client was asked to use a plugin it does not have. The MySQL 8.0 upgrade notes list the forms it takes with old client libraries:

  • Authentication plugin 'caching_sha2_password' is not supported
  • Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(.../caching_sha2_password.so, 2): image not found
  • From PHP: The server requested authentication method unknown to the client [caching_sha2_password]

The same notes explain a trap: an old client can fail "even to use accounts that do not authenticate with caching_sha2_password", because the server names its default plugin in the handshake. Upgrading the client library is the only lasting fix.

The reverse error, Authentication plugin 'mysql_native_password' cannot be loaded, now appears with 9.x client tools. The 9.0.0 release notes say the client-side native plugin was "converted into a dynamically loadable plugin". A 9.x client that connects to a native-password account on an older server needs that plugin file in its plugin directory, and some packages do not ship it. Migrating the account fixes it from the server side.

bash
# Which client library and plugin directory is this client using?
mysql --version
mysql_config --plugindir 2>/dev/null
ls "$(mysql_config --plugindir 2>/dev/null)" | grep -i native

Interpretation: a 9.x client with no mysql_native_password file in its plugin directory cannot log in to native accounts. Either install the client plugins package for your platform or move the account to caching_sha2_password.

Which connector versions support caching_sha2_password?

Before you change any account, upgrade every client that uses it. These are the first versions that support caching_sha2_password, from each project's own documentation. Treat them as floors, not targets: run a current release.

Client or driverSupports caching_sha2_password fromSource
libmysqlclient (mysql CLI, C programs)8.0.4 (5.7 line: 5.7.23)MySQL 8.0 upgrade notes
Connector/J8.0.9MySQL 8.0 upgrade notes
Connector/NET8.0.10MySQL 8.0 upgrade notes
Connector/C++1.1.11 or 8.0.7MySQL 8.0 upgrade notes
PHP mysqli and PDO_MySQL (mysqlnd)PHP 7.4.4, full supportPHP manual
Go go-sql-driver/mysql1.4Driver changelog
Python PyMySQL0.9.0 (RSA needs the cryptography package)Driver changelog
Node.js mysql2Supported through its built-in auth pluginDriver documentation
Node.js mysql (mysqljs)No released support; pull request #2233 still openGitHub, checked November 2026

Two error strings tell you which row you are in. The Node.js mysql package reports server error 1251, ER_NOT_SUPPORTED_AUTH_MODE: "Client does not support authentication protocol requested by server; consider upgrading MySQL client". The fix is to move to mysql2. Connector/J reports Public Key Retrieval is not allowed when it reaches full authentication without TLS. Its allowPublicKeyRetrieval property defaults to false.

ini
# Spring Boot: prefer TLS over allowPublicKeyRetrieval=true
spring.datasource.url=jdbc:mysql://db-01:3306/app?sslMode=REQUIRED
# If TLS is not possible, pin the key instead of fetching it:
# jdbc:mysql://db-01:3306/app?sslMode=DISABLED&serverRSAPublicKeyFile=/etc/app/db-01.pem

Interpretation: Connector/J's sslMode already defaults to PREFERRED. Setting REQUIRED makes a missing certificate fail loudly instead of falling back to the RSA path. allowPublicKeyRetrieval=true works too, but it trusts whatever key the server sends.

bash
# Find the driver versions your services actually ship
npm ls mysql mysql2
pip show pymysql mysql-connector-python mysqlclient 2>/dev/null | grep -E '^(Name|Version)'
go list -m all | grep go-sql-driver
mvn dependency:tree | grep -E 'mysql-connector-(j|java)'

Interpretation: compare each result with the table, and include batch jobs, BI tools, CDC connectors, and backup scripts. Those are the clients that usually still run an old driver.

How do I find accounts still on mysql_native_password?

The plugin is stored per account in mysql.user. Run this on every primary and every replica you might promote; account lists drift.

sql
SELECT user, host, plugin, password_last_changed, account_locked
FROM mysql.user
WHERE plugin IN ('mysql_native_password', 'sha256_password')
ORDER BY user, host;

Interpretation: every row is an account to migrate. sha256_password is also deprecated, so move those accounts in the same pass. Locked accounts, and system accounts such as mysql.sys that use other plugins, need no action.

sql
-- Which of those accounts are actually connecting, and from where?
SELECT u.user, u.host AS account_host, p.HOST AS client_host,
       p.CURRENT_CONNECTIONS, p.TOTAL_CONNECTIONS
FROM mysql.user u
JOIN performance_schema.accounts p ON p.USER = u.user
WHERE u.plugin = 'mysql_native_password'
ORDER BY p.TOTAL_CONNECTIONS DESC;

Interpretation: performance_schema.accounts counts connections since the last restart, by user and client host. Accounts with zero connections over a full business cycle are candidates to lock or drop rather than migrate. The client hosts tell you which teams to contact about driver versions.

The MySQL Shell upgrade checker runs the same review before a version change. Its documented checks include authMethodUsage, deprecatedDefaultAuth, and deprecatedRouterAuthMethod for MySQL Router's internal accounts.

bash
# MySQL Shell 9.7 can target any server release up to 9.7
mysqlsh -- util checkForServerUpgrade admin@db-01:3306 \
  --target-version=9.7.4 --output-format=JSON \
  --config-path=/etc/my.cnf

Interpretation: the target version cannot be newer than the Shell you run, so use a 9.7 Shell to check a 9.7 upgrade. Treat any authentication finding reported as an error as a blocker, and migrate that account first.

On Amazon Aurora MySQL 8.4

Managed services behave differently. The Aurora MySQL 8.4 security notes say existing mysql_native_password users keep working after the upgrade, and that authentication_policy defaults to *:caching_sha2_password. They also say require_secure_transport is ON by default in Aurora MySQL 8.4, so clients without TLS fail there for a different reason. AWS still recommends moving users to caching_sha2_password. For RDS for MySQL 8.4, check your parameter group before you assume either behavior.

Do ProxySQL, MaxScale, and MySQL Router handle caching_sha2_password?

A proxy authenticates twice: the client to the proxy (frontend) and the proxy to MySQL (backend). Both sides must support the plugin, or migrating a backend account breaks every pooled connection the next time the proxy reconnects.

ProxySQL. Its authentication methods page lists full frontend and backend support from v2.6.0. Versions 2.0.2 to 2.5.x support it on the frontend only with cleartext passwords in mysql_users. The same page warns that switching authentication methods during the handshake "presents challenges", so set the default plugin to match your accounts.

sql
-- ProxySQL admin interface (port 6032), ProxySQL 2.6 or later
SELECT username, default_hostgroup, active FROM mysql_users;
SET mysql-default_authentication_plugin = 'caching_sha2_password';
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;

Interpretation: every username listed must exist on MySQL with the same password. Change the ProxySQL default only after the backend accounts are migrated and the ProxySQL version is 2.6 or later. Our ProxySQL guide covers the rest of the configuration.

MariaDB MaxScale. As of November 2026, the MaxScale MariaDB/MySQL authenticator page documents mysql_native_password and does not mention caching_sha2_password. If MaxScale fronts MySQL 8.4, confirm support for your MaxScale version with MariaDB before you migrate the accounts it uses or proxies.

MySQL Router. Router creates internal accounts when it is bootstrapped. The upgrade checker's deprecatedRouterAuthMethod check reports those accounts if they use a deprecated plugin.

How do replication users authenticate with caching_sha2_password?

A replica's receiver thread is just another client. If the replication user is on caching_sha2_password and the channel has no TLS, the CHANGE REPLICATION SOURCE TO reference says you "must specify either" GET_SOURCE_PUBLIC_KEY=1 or SOURCE_PUBLIC_KEY_PATH. Without one of them, the channel works until the source restarts, then fails on the cold cache with the 2061 message in Last_IO_Error.

sql
-- On the replica. Prefer TLS; SOURCE_SSL=1 never falls back to plain text.
STOP REPLICA;
CHANGE REPLICATION SOURCE TO
  SOURCE_SSL = 1
  FOR CHANNEL '';
START REPLICA;

-- Without TLS, request the source's RSA public key instead:
-- CHANGE REPLICATION SOURCE TO GET_SOURCE_PUBLIC_KEY = 1 FOR CHANNEL '';

Interpretation: with several channels, every statement must name its channel. On 8.4, the old GET_MASTER_PUBLIC_KEY and MASTER_PUBLIC_KEY_PATH keywords are removed, so update automation that still uses them.

sql
-- Confirm the channel survives a cold cache: run FLUSH PRIVILEGES on the source,
-- restart the receiver on the replica, then check:
SELECT CHANNEL_NAME, SERVICE_STATE, LAST_ERROR_NUMBER, LAST_ERROR_MESSAGE
FROM performance_schema.replication_connection_status;

Interpretation: SERVICE_STATE should be ON with LAST_ERROR_NUMBER 0. Error 2061 here means the channel has neither TLS nor the key.

Group Replication's distributed recovery uses the same rules through its own variables. Set them on every member that may join or rejoin:

sql
SET PERSIST group_replication_recovery_use_ssl = ON;
-- or, without TLS:
SET PERSIST group_replication_recovery_get_public_key = ON;

Interpretation: a member that rejoins after a restart runs distributed recovery with a cold cache on the donor, so this setting decides whether rejoin works. The MySQL 8.4 GTID replication guide shows the full channel setup.

Change the replica first

Set SOURCE_SSL=1 or GET_SOURCE_PUBLIC_KEY=1 on every replica before you migrate the replication user on the source. Done in that order, the channel never sees a plugin it cannot complete.

How do I migrate accounts safely before 9.x?

The migration itself is one statement per account. The work is making sure every client can complete full authentication before that statement runs. Changing the plugin discards any secondary password, and the password management page says RETAIN CURRENT PASSWORD combined with a plugin change fails. Dual passwords cannot soften this cutover.

Runbook: mysql_native_password to caching_sha2_password on MySQL 8.4

Eight steps; step 5 is the cutover for each account

  1. Inventory native accounts

    Run on every primary and replica. Save the list in the change ticket.

    SELECT user, host FROM mysql.user WHERE plugin = 'mysql_native_password';
  2. Map accounts to clients

    Use performance_schema.accounts to find client hosts, then check each driver version against the table above.

  3. Give every client a full-auth path

    TLS on application connections, or a pinned RSA public key. Upgrade drivers and proxies that cannot do either.

  4. Rehearse on staging with a cold cache

    Migrate a staging account, then empty the cache so the test exercises full authentication, not the fast path.

    FLUSH PRIVILEGES;
  5. Migrate the account

    Cutover

    Keep the same password so client configs do not change. Open pooled connections stay up; new ones use the new plugin.

    ALTER USER 'app'@'10.0.%' IDENTIFIED WITH caching_sha2_password BY 'same-password-as-today';
  6. Migrate replication users last

    Only after every replica has SOURCE_SSL=1 or GET_SOURCE_PUBLIC_KEY=1 on its channel.

  7. Turn the native plugin off

    Remove mysql_native_password=ON from my.cnf and restart in a window. The restart is also your cold-cache test.

    sudo systemctl restart mysqld
  8. Run the 9.7 upgrade checker

    No authentication errors should remain before you plan the 9.7 LTS upgrade.

    mysqlsh -- util checkForServerUpgrade \ admin@db-01:3306 --target-version=9.7.4

Rollback point: on 8.4 with the plugin still enabled, ALTER USER ... IDENTIFIED WITH mysql_native_password BY '...' puts an account back. After the 9.x upgrade there is no way back, so finish step 8 first.

If you do not know an account's password, you cannot keep it: MySQL stores only a hash, and the native hash cannot be converted. Generate a new one, and roll it out the way you would rotate any credential.

sql
-- Unknown password: let MySQL generate one, then update the client's secret store
ALTER USER 'report'@'%'
  IDENTIFIED WITH caching_sha2_password BY RANDOM PASSWORD;

-- When the list is empty, the estate is ready for 9.x
SELECT plugin, COUNT(*) AS accounts
FROM mysql.user
GROUP BY plugin;

Interpretation: BY RANDOM PASSWORD returns the new password once, in the result set, so capture it straight into your secret manager. The final query should show no mysql_native_password rows. For a shared account, a safer pattern is to create a second account on caching_sha2_password, move clients to it one by one, and drop the old account at the end.

Frequently asked questions

Can I still use mysql_native_password in MySQL 8.4?

Yes, but only as a temporary bridge. The plugin is built into MySQL 8.4 and disabled by default. Start the server with --mysql-native-password=ON, or put mysql_native_password=ON in the [mysqld] section, and native accounts work again. MySQL 9.0 removed both the plugin and that option, so migrate every account before upgrading to 9.7 LTS.

Why does my app connect only after I log in with the mysql client?

Your manual login filled the caching_sha2_password cache. After a restart or FLUSH PRIVILEGES the cache is empty, and the first login per account needs TLS, a Unix socket, or the server's RSA public key. A local socket login meets that rule, so later application connections take the fast path. The real fix is TLS or an RSA key for the application.

Is allowPublicKeyRetrieval=true safe in Connector/J?

It works, but it trusts whatever public key the server sends, so a machine in the middle could supply its own. The MySQL manual says a trusted local copy of the key is more secure, and that requesting the key may be acceptable on trusted networks. Prefer sslMode=REQUIRED, or pin the key with serverRSAPublicKeyFile.

Do I need the user's password to migrate to caching_sha2_password?

Yes. MySQL stores only a password hash, and a mysql_native_password hash cannot be converted. Run ALTER USER with IDENTIFIED WITH caching_sha2_password BY and the existing password, so clients keep working. If nobody knows the password, use BY RANDOM PASSWORD and update the client's secret store at the same time.

Will mysql_native_password accounts work after upgrading to MySQL 9.7?

No. MySQL 9.0.0 removed the server-side mysql_native_password plugin and the --mysql-native-password option, and 9.7 LTS follows 9.0. Accounts still on the plugin have nothing to authenticate them. Run the MySQL Shell upgrade checker with a 9.7 target and migrate every flagged account on 8.4 first.

Key takeaways

  • Error 1524 means a statement or account still needs mysql_native_password; on 8.4, --mysql-native-password=ON buys time, and on 9.x nothing does.
  • Error 2061 means a cold-cache login had neither TLS nor the RSA key; fix the client, not the cache.
  • Upgrade every driver and proxy first: Connector/J 8.0.9, PHP 7.4.4, Go driver 1.4, PyMySQL 0.9.0, ProxySQL 2.6.0, and mysql2 instead of mysql on Node.js.
  • Set SOURCE_SSL=1 or GET_SOURCE_PUBLIC_KEY=1 on replicas before migrating the replication user.
  • Test every change with a cold cache, then clear the upgrade checker before planning 9.7 LTS.

Plan your MySQL authentication migration with JusDB

JusDB's MySQL upgrade team can review your accounts, connector versions, proxies, and replication channels against the 8.4 and 9.7 authentication changes. We can then plan a staged move from mysql_native_password to caching_sha2_password, with a rollback point for each step.

Bring your mysql.user plugin inventory, your driver and proxy versions, and your planned upgrade window. Your team approves every production change.

Share this article

Database engineering notes

Articles like this one, in your inbox. No spam, unsubscribe anytime.

JusDB Team

Official JusDB content team

Keep reading

MySQL Shell Dump and Load Utilities vs mydumper

Compare MySQL Shell 26.10 dump and load with mydumper 1.0 on locking, chunking, managed targets, deferred indexes, resume, and GTIDs, with commands for each step.

MySQL17 minNov 7, 2026
Read

MySQL 26.7 and Calendar Versioning: Which MySQL Should You Run Now?

Learn how MySQL 26.7 and 26.10 calendar versions work, how LTS and Innovation tracks differ, which upgrade paths are allowed, and which MySQL version to run in 2026.

MySQL18 minOct 30, 2026
Read

MySQL Clone Plugin: Provisioning Replicas Without a Backup Restore

Provision a MySQL 8.4 replica with the clone plugin: prerequisites, privileges, DDL and bandwidth settings, progress monitoring, and GTID replication after the clone.

MySQL18 minOct 29, 2026
Read