MySQL Error: “Table storage engine for `proc` doesn’t have this option (ERROR 1031)”

MySQLmysqldumpperconaupgrade

I'm running into a strange problem with MySQL. Searched everywhere for a fix but cannot find anything. Running Ubuntu 14.04.

I have a database running on Percona MySQL 5.7.18-16. I want to update this to Percona Server 5.7.19-17. I run a script that performs a mysqldump through Ruby on Rails in a Rake task.

When I use the updated Percona and get to the mysqldump stage, I get the error as stated in the title. The table that it refers to is the internal mysql.proc table. I have no idea why this is occurring.

I noticed that if I run mysql_upgrade --force before the dump, it works (although mysql_upgrade runs into the same error but seems to ignore it). I do however want to get to the root cause so that I do not have to run mysql_upgrade. I ran a diff on my database .sql files before and after mysql_upgrade, and there was no change.

Does anybody have any ideas as to how to get to the root of this problem and fix it? Any and all suggestions will be greatly appreciated!

Thank you!

Best Answer

The error you got is often seen when you try to use a table option that is incompatible with the storage engine used by the table you're working on.

For example,

CREATE TABLE mytable (...) ROW_FORMAT=FIXED;

This table option was deprecated in MySQL 5.7. It will raise an error if innodb_strict_mode is enabled.

You should always run mysql_upgrade after installing an upgrade of MySQL (it says so in https://dev.mysql.com/doc/refman/5.7/en/upgrading.html). Sometimes a new version introduces a change to system tables, and you should apply those changes after you update the software.

I'm guessing you have not run mysql_upgrade in a while, so the dump produced from your previous installation may have still used system tables in the format of some earlier version of MySQL.

So it wouldn't hurt to run mysql_upgrade before dumping the system tables before you upgrade.