# MySQL 8.0 End of Life: Upgrade to MySQL 8.4 LTS or Switch to MariaDB

> MySQL 8.0 reached end of life in April 2026. Upgrade to MySQL 8.4 LTS step by step, fix mysql_native_password logins, or migrate to MariaDB 11.8 on Ubuntu.

Source: https://hanoo.io/blog/mysql-8-0-end-of-life · Published 2026-11-12 · Updated 2026-11-12 · By the Hanoo team

MySQL 8.0, the database behind a huge share of LAMP servers, reached **end of life on April 30, 2026**. Oracle no longer releases fixes for it. If your WordPress, Laravel or Magento site runs on MySQL 8.0, you have two real choices: upgrade in place to **MySQL 8.4 LTS**, or move to **MariaDB**. Both are supported for years and both work with PHP apps.

This guide covers what end of life means for MySQL 8.0 on Ubuntu, what changes in MySQL 8.4, how to upgrade safely, and how to migrate to MariaDB instead.

> **In short:** MySQL 8.0's last release was 8.0.46, in April 2026. The direct upgrade is **MySQL 8.4 LTS** (supported until April 2032), an in-place upgrade with a few breaking changes: `mysql_native_password` is off by default and `default_authentication_plugin` no longer exists. The alternative is **MariaDB 11.8 LTS**, which WordPress, Laravel and Magento support. It needs a dump-and-restore move, but no app code changes for typical PHP sites. Back up first either way: neither move can be undone in place.

## When did MySQL 8.0 reach end of life?

MySQL 8.0 was released in April 2018. Premier support ended in April 2025, and extended support ended on **April 30, 2026**, with **8.0.46** as the final release. Here is where the MySQL-compatible databases stand in November 2026:

| Database | Type | Supported until |
| --- | --- | --- |
| MySQL 8.0 | LTS | **Ended April 30, 2026** |
| MySQL 8.4 | LTS | April 2032 (premier support until April 2029) |
| MySQL 9.7 | LTS | April 2034 |
| MariaDB 10.6 | LTS | Community support ended July 2026 |
| MariaDB 10.11 | LTS | February 2028 |
| MariaDB 11.4 | LTS | May 2029 |
| MariaDB 11.8 | LTS | June 2028 |
| MariaDB 12.3 | LTS | June 2029 |

MySQL also publishes short-lived **Innovation** releases between LTS versions. They're supported only until the next one ships, so they don't suit a server you want to leave alone.

## What end of life means for your server

- **Oracle's own packages:** if you installed MySQL from Oracle's APT repository, you get no more updates for 8.0. Vulnerabilities found from now on stay open.
- **Ubuntu's packages:** Ubuntu 22.04 and 24.04 ship `mysql-server-8.0`. Canonical has kept publishing backported security fixes for it after April 2026, for example in August 2026. That helps, but there are no new upstream releases behind those patches, and the backports depend on Canonical's own work.
- **Managed databases:** cloud providers are moving 8.0 instances to paid extended support or scheduling forced upgrades to 8.4. Check your provider's dates.

Ubuntu 26.04 LTS ships **MySQL 8.4**, so even the distribution route ends up at the same upgrade.

## Your options at a glance

| | Upgrade to MySQL 8.4 LTS | Switch to MariaDB 11.8 LTS | Stay on MySQL 8.0 |
| --- | --- | --- | --- |
| Method | In-place package upgrade | Dump and restore | Nothing now |
| Downtime | Minutes (one restart) | Minutes to hours, depending on data size | None |
| App changes | Rarely; mainly user authentication | Rarely; see the MariaDB section | None |
| License and governance | GPLv2, Oracle | GPLv2, MariaDB Foundation and MariaDB plc | — |
| Supported until | April 2032 | June 2028 (11.4 LTS: May 2029) | Ubuntu backports or paid support only |
| Rollback | Restore from backup | Point the app back at the old server | — |

Can you jump straight to **MySQL 9.7 LTS**? Not directly. MySQL supports upgrades from one LTS series to the next, so 8.0 goes to 8.4 first, and 8.4 to 9.7 later if you want it. For most PHP sites, 8.4 is the sensible stop: it's supported until 2032.

## Upgrade MySQL 8.0 to MySQL 8.4 LTS

### What changes in MySQL 8.4

Most schemas and queries carry over unchanged. These changes are the ones that break real servers:

| Change | What breaks | Fix |
| --- | --- | --- |
| `mysql_native_password` disabled by default | Users created with it can't log in | Move users to `caching_sha2_password`, or temporarily set `mysql_native_password=ON` |
| `default_authentication_plugin` removed | MySQL won't start if `my.cnf` sets it | Delete the line; `authentication_policy` replaces it |
| `expire_logs_days` removed | MySQL won't start if `my.cnf` sets it | Use `binlog_expire_logs_seconds` |
| `MASTER` and `SLAVE` statements removed | Replication scripts and monitoring | `CHANGE REPLICATION SOURCE TO`, `SHOW REPLICA STATUS`, `SHOW BINARY LOG STATUS` |
| `AUTO_INCREMENT` on `FLOAT` or `DOUBLE` columns | The upgrade itself fails | Change those columns to an integer type first |
| Foreign keys to non-unique keys | New ones are rejected; existing ones load with a warning | Point foreign keys at a primary or unique key |
| `mysqlpump` removed | Backup scripts that call it | `mysqldump` or MySQL Shell's dump utilities |

MySQL 8.4 also changes several InnoDB defaults for modern hardware. For example, `innodb_io_capacity` goes from 200 to 10000, `innodb_flush_method` becomes `O_DIRECT`, the adaptive hash index and change buffering are turned off, and the log buffer grows to 64 MB. These suit SSD-based servers, but if you tuned any of these values by hand in 8.0, review them.

### 1. Back up

A downgrade from 8.4 to 8.0 isn't supported. Your backup is your rollback:

```bash
sudo mysqldump --single-transaction --routines --triggers --events \
  --all-databases > /root/mysql-8.0-full.sql
```

`--single-transaction` gives a consistent snapshot of InnoDB tables without locking your site. Copy the file off the server too, and take a provider snapshot of the disk if you can.

### 2. Run the upgrade checker

MySQL Shell includes a checker that reports problems before you upgrade:

```bash
mysqlsh -- util checkForServerUpgrade root@localhost:3306 \
  --target-version=8.4.0 --config-path=/etc/mysql/my.cnf
```

Fix every **error** it reports. Read the **warnings**: most are about deprecated settings and the authentication plugin.

### 3. Find and convert users on the old authentication plugin

```sql
SELECT user, host, plugin FROM mysql.user
WHERE plugin = 'mysql_native_password';
```

Convert each application user:

```sql
ALTER USER 'shop'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'the-same-password';
```

PHP's `mysqli` and `PDO_MySQL` support `caching_sha2_password` through mysqlnd. It works without extra setup over a Unix socket or TLS. In WordPress, `DB_HOST` set to `localhost` uses the socket. If an old client can't be changed yet, add `mysql_native_password=ON` under `[mysqld]` as a temporary bridge. The plugin is deprecated and will be removed in a later version.

### 4. Clean up the configuration

Remove options that no longer exist, or MySQL 8.4 refuses to start:

```bash
sudo grep -rnE "default_authentication_plugin|expire_logs_days|skip-host-cache|master_info_repository|relay_log_info_repository|transaction_write_set_extraction" /etc/mysql/
```

### 5. Upgrade the packages

Ubuntu 22.04 and 24.04 only have MySQL 8.0 in their own archive. To get 8.4 on them, use Oracle's MySQL APT repository. Download the current `mysql-apt-config` package from [dev.mysql.com/downloads/repo/apt](https://dev.mysql.com/downloads/repo/apt/), then:

```bash
sudo dpkg -i mysql-apt-config_*_all.deb     # choose "mysql-8.4-lts"
sudo mysql -e "SET GLOBAL innodb_fast_shutdown = 0"
sudo systemctl stop mysql
sudo apt update
sudo apt install mysql-server
```

`innodb_fast_shutdown = 0` makes InnoDB finish all pending work before it stops, which is the recommended state for an in-place upgrade. On its first start, MySQL 8.4 upgrades the data dictionary and system tables by itself. `mysql_upgrade` hasn't been needed since 8.0.16.

### 6. Verify

```bash
sudo mysql -e "SELECT VERSION();"
sudo journalctl -u mysql --since "10 min ago" --no-pager
sudo tail -n 50 /var/log/mysql/error.log
```

Then load the site, log in, and run a write action, such as saving a post or placing a test order. Watch the error log for the first day.

## Switch from MySQL 8.0 to MariaDB

MariaDB began as a fork of MySQL and is still compatible with it for what PHP apps use. It's the default MySQL-compatible database in Debian and other distributions, and it is GPL-licensed and developed in the open. WordPress, Laravel, Drupal and Magento all support it. MariaDB 11.8 LTS is the long-term release Ubuntu 26.04 ships, and the one this guide uses. MariaDB 11.4 and 12.3 are also LTS releases, supported into 2029.

### What's different from MySQL 8.0

- **No in-place upgrade.** MariaDB can't open a MySQL 8.0 data directory. You move the data with a logical dump (`mysqldump`) and restore it.
- **Collations.** MySQL 8.0's default collation is `utf8mb4_0900_ai_ci`. **MariaDB 11.4.5 and later**, including 11.8, accept it as an alias. Older MariaDB, such as 10.11 in Ubuntu 24.04's archive, fails with `ERROR 1273 Unknown collation`. Install 11.8, or replace the collation in the dump with `utf8mb4_unicode_520_ci`.
- **JSON.** MariaDB stores JSON as text with a validity check, not in a binary format. JSON functions work, and Laravel's `json` columns work. MariaDB 11.8 doesn't support MySQL's `->` and `->>` shorthand operators in raw SQL, so use `JSON_VALUE()` or `JSON_EXTRACT()` there.
- **User accounts.** Users that use MySQL's `caching_sha2_password` can't be carried over. Recreate application users on MariaDB. You only have a few, and it's a chance to give each app its own login.
- **Replication.** MariaDB's GTIDs differ from MySQL's, so a mixed MySQL–MariaDB replication setup needs extra care. Most single-server sites don't use replication.

### Migrate step by step

The cleanest route is a **new server**: install MariaDB there, restore, point the app at it, and keep the old server as an instant rollback. To migrate on the same server, stop MySQL and move `/var/lib/mysql` aside before installing MariaDB, because both use the same data directory and port.

1. **Dump only your application databases,** not MySQL's own `mysql` system schema:

```bash
sudo mysqldump --single-transaction --routines --triggers --events \
  --set-gtid-purged=OFF --databases shop blog > /root/apps.sql
```

2. **Install MariaDB 11.8 LTS.** Ubuntu 24.04's archive has 10.11, so use MariaDB's official repository:

```bash
curl -LsS https://r.mariadb.com/downloads/mariadb_repo_setup | \
  sudo bash -s -- --mariadb-server-version="mariadb-11.8"
sudo apt install mariadb-server
sudo mariadb -e "SELECT VERSION();"
```

3. **Restore and recreate users:**

```bash
sudo mariadb < /root/apps.sql
```

```sql
CREATE USER 'shop'@'localhost' IDENTIFIED BY 'a-long-random-password';
GRANT ALL PRIVILEGES ON shop.* TO 'shop'@'localhost';
```

4. **Point the app at MariaDB** and test. WordPress uses the same `DB_*` constants in `wp-config.php` (see our [WordPress on Ubuntu 24.04 guide](/blog/install-wordpress-ubuntu-24-04-caddy)). Laravel keeps `DB_CONNECTION=mysql` and also has a dedicated `mariadb` driver that you can switch to. Our guide to [deploying Laravel 13](/blog/deploy-laravel-13-production-ubuntu) covers the rest of the server. [Magento 2.4.9](/blog/install-magento-2-4-9-ubuntu-24-04) needs no changes beyond the connection settings in `app/etc/env.php`.

5. **Check the data:** compare row counts of your largest tables on both sides, and run `sudo mariadb-check --all-databases`.

For large databases, measured in tens of gigabytes, a parallel tool such as mydumper and myloader is much faster than `mysqldump`.

## Which should you choose?

- **Choose MySQL 8.4** if you want the smallest change: one package upgrade, the same data directory, and the same tools. It's the right call for apps that depend on MySQL-only features, or for teams that also use MySQL in the cloud.
- **Choose MariaDB 11.8** if you're moving to a new server anyway, want a community-governed database, or want to match what distributions and many hosting platforms now ship. Typical WordPress, Laravel and Magento sites move without code changes.
- **Don't stay on 8.0** longer than it takes to plan one of the two. Ubuntu's backports reduce the risk, but they don't remove it.

If you're upgrading PHP at the same time, take it in two steps rather than one. PHP 8.2 also reaches end of life soon. See our guide to [the PHP 8.2 end of life](/blog/php-8-2-end-of-life).

## How Hanoo handles databases

[Hanoo](/) manages Ubuntu servers you own, and uses MariaDB for every application database:

- **MariaDB 11.8 LTS** on Ubuntu 22.04, 24.04 and 26.04. On 22.04 and 24.04 it comes from MariaDB's signed repository rather than the older version in Ubuntu's archive. On 26.04 it is Ubuntu's own package.
- **One database and one user per application,** with a generated password that stays out of process lists and logs. You can reveal it from the application's **Access** tab.
- **Remote access behind an IP allowlist.** Database access from outside the server is closed until you allow specific IP addresses. That's how you load an existing dump from your own computer with the `mariadb` client.
- **Clones include the data.** Cloning an application copies its schema and data into a fresh database, on the same server or another one. That's a safe way to try an upgrade on a copy first.

Hanoo doesn't install or manage MySQL, so if you move to MariaDB, a Hanoo server is ready for it from the first application.

## Frequently asked questions

### When is MySQL 8.0 end of life?

MySQL 8.0 reached end of life on April 30, 2026, with 8.0.46 as its final release. Oracle no longer publishes bug or security fixes for it.

### Can I upgrade from MySQL 8.0 directly to MySQL 8.4?

Yes. Upgrading from 8.0 to the next LTS series, 8.4, is a supported in-place upgrade. Back up first, run MySQL Shell's `checkForServerUpgrade`, remove deprecated settings from `my.cnf`, then upgrade the packages. MySQL upgrades its system tables automatically on first start.

### Can I upgrade from MySQL 8.0 straight to MySQL 9.7?

Not in place. MySQL supports upgrades from one LTS series to the next, so you upgrade from 8.0 to 8.4 first, then from 8.4 to 9.7. A logical dump and restore into 9.7 is the other route.

### Why can't my users log in after upgrading to MySQL 8.4?

MySQL 8.4 disables the `mysql_native_password` plugin by default. Users created with it can't authenticate. Convert them with `ALTER USER ... IDENTIFIED WITH caching_sha2_password`, or set `mysql_native_password=ON` under `[mysqld]` as a temporary fix.

### Is MariaDB a drop-in replacement for MySQL 8.0?

For typical PHP apps, it works without code changes. WordPress, Laravel, Drupal and Magento all support MariaDB. The move itself isn't a drop-in, though: you migrate with a dump and restore, recreate users, and use MariaDB 11.4.5 or later so MySQL 8's `utf8mb4_0900_ai_ci` collation is recognized.

### Does Ubuntu still patch MySQL 8.0?

Ubuntu 22.04 and 24.04 ship MySQL 8.0, and Canonical has continued to publish backported security fixes for it after April 2026. There are no new upstream releases behind them. Ubuntu 26.04 LTS ships MySQL 8.4.
