Making upgrades from MySQL 5.0 easier

The intention from the start was to make upgrades to newer MySQL versions trivial. We have done a lot of work to keep data formats compatible (both in the .frm files and in the storage engines); when you install a new version of MySQL things should “just work”. For a long time this was true, until MySQL 5.0 where we had to do some data incompatible changes, like in the way some characters were sorted and how end-of-line blanks were stored in indexes. To make the upgrade process easy, we created the ‘mysql_upgrade’ program which should detect possible incompatible tables and automatically convert data as needed. The full upgrade process (for your data) should always be as simple as:

  1. Install your new MariaDB / MySQL version.
  2. Start the mysqld server.
  3. Run mysql_upgrade.

Unfortunately, over time something has gone wrong. We found this out when a user recently tried to upgrade a big installation from MySQL 5.0 to MariaDB. The issues encountered included:

  • Tables with long names were not converted to the new 5.1 name format
  • Some InnoDB tables failed with the error: “Table upgrade required; Please do “REPAIR TABLE `xxx`” or dump/reload to fix it!”
  • The same failure for all ARCHIVE tables
  • Some strange error messages for some internal system tables

So the upgrade process for this user was actually:

  1. Install the new MariaDB / MySQL version.
  2. Start the mysqld server
  3. Run mysql_upgrade
  4. Make a list of all tables that failed to upgrade.
  5. Reinstall the previous MySQL version.
  6. Dump the problem tables with mysql_dump
  7. Remove the dumped tables.
  8. Install the new MariaDB / MySQL version again.
  9. Load the dumped tables.
  10. Test that nothing was missed with ‘mysql_upgrade –force’

We learned about the above problems on the #maria IRC channel and within 24 hours we had fixed all of the issues. We are happy to announce the full upgrade process is once again just the three step: Install new version, Start mysqld, Run ‘mysql_upgrade’. We also added more options to mysql_upgrade and mysqlcheck (which is used by mysql_upgrade) to make it easier to find out what is happening if something does go wrong. As part of the process (and to document the changes) we also added some new articles to our Knowledgebase about upgrading from MySQL 5.0,mysql_upgrade and mysqlcheck. We hope all the above will make the upgrade process much easier and more reliable for everyone!