Skip to main content

VillageSQL is a drop-in replacement for MySQL with extensions.

All examples in this guide work on VillageSQL. Install Now →
This guide is AI-generated content. We tested every command in it against a live server before publishing, but your mileage may vary. Do your own extensive testing before you run any of this against a production system.
MySQL 8.0 reaches end of life on April 30, 2026. After that date it receives no security patches. The upgrade target is MySQL 8.4 LTS, with premier support to approximately April 2029 and extended support to April 2032. Oracle designed the 8.0 to 8.4 path to be smooth, but two changes break real systems: the default authentication plugin, and removed configuration variables. This guide covers both, plus the checks to run before you start.

What Changes in 8.4

The upgrade is in-place: install the 8.4 binaries over an 8.0 data directory and the server upgrades the data dictionary itself on first start. Most schemas and queries carry over untouched. The changes that actually bite:

Step 1: Find Accounts on the Old Auth Plugin

Before upgrading, list every account still using mysql_native_password:
Migrate each one to caching_sha2_password and update the application’s stored password:
On 8.4, creating an account with the old plugin fails because the plugin is not loaded:
If you cannot migrate an account before the upgrade, 8.4 can load the plugin explicitly with --mysql-native-password=ON in your config. Treat that as a bridge, not a destination: the plugin is deprecated and scheduled for removal.

Step 2: Clean Your Configuration File

MySQL 8.4 removes system variables that were deprecated in 8.0. If your my.cnf sets one, the 8.4 server refuses to start with an unknown-variable error. The two most common:
Replace expire_logs_days with binlog_expire_logs_seconds, and delete default_authentication_plugin (the 8.4 replacement, authentication_policy, defaults to caching_sha2_password already). Grep your config for every variable you set, and check each against the 8.4 reference before the upgrade rather than during the outage window.

Step 3: Check the Schema for Removed Syntax

Run mysqlcheck against all databases and review the output:
Pay particular attention to AUTO_INCREMENT on FLOAT or DOUBLE columns and to non-standard foreign key constraints, both removed in 8.4.

Step 4: Back Up, Then Upgrade In Place

There is no supported in-place downgrade from 8.4 to 8.0. Once the data dictionary is upgraded, the only way back is restoring a backup. So the backup is not a formality:
Then the upgrade itself: stop the 8.0 server, install the 8.4 binaries, and start the server on the same data directory. The server runs its upgrade steps automatically on first start; watch the error log until it reports ready for connections. Confirm the result:

The VillageSQL Angle

VillageSQL Server is a drop-in replacement for MySQL 8.4. Once you are on 8.4, everything in your stack that works with MySQL 8.4 also works with VillageSQL, and switching later is functionally a minor version swap on the same data directory. If the extension framework interests you, the 8.4 upgrade you are doing anyway is the on-ramp. See Upgrading to VillageSQL for that procedure.

See also