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.