MySQL 8.0: mysql_upgrade Becomes Automatic

Since MySQL 8.0.16, the server checks and upgrades its data dictionary and system tables automatically on startup — the separate mysql_upgrade step is gone.

MySQL 5.7 → MySQL 8.0

Quick answer

MySQL 5.7 (and earlier) required running the mysql_upgrade client program manually after swapping in new server binaries. MySQL 8.0.16+ performs this check and upgrade automatically the first time the new server starts — deployment scripts that still invoke mysql_upgrade as a separate step are running an unnecessary (though harmless) extra command.

Why it matters

Automation/runbooks written for 5.7-style upgrades that gate on mysql_upgrade completing successfully as a distinct step need updating — on 8.0+, success is signaled by the server starting up cleanly, not by a separate command's exit code. MariaDB still uses its own separate mariadb-upgrade (formerly mysql_upgrade) command, so a shared multi-target upgrade script still needs a branch for MariaDB.

What to do about it

Migration steps

  • For MySQL 8.0+ targets, remove the separate mysql_upgrade step from upgrade automation and instead verify the server log for successful automatic upgrade / startup.
  • For MariaDB targets, keep the mariadb-upgrade (or legacy mysql_upgrade alias) step — this change is MySQL-specific.

References

  • MySQL 8.0 Reference Manual — Upgrading MySQL (v8.0) — checked 2026-07-31
  • MariaDB Knowledge Base — Upgrading from MariaDB — checked 2026-07-31

Last verified 2026-07-31.