Programster's Blog

Tutorials focusing on Linux, programming, and open-source

Solving MySQL InnoDB Corruption

Today I got a scary error message when running some database migration scripts:

mysqli::query(): (HY000/1712): Index countermeasure_costs is corrupted

My first reaction was to just restore an earlier snapshot and run the scripts again. Unfortunately this happened again, so I ran the restoration process again and checked the table with the following command:

check table [table to check];

This returned:

+---------------------------+-------+----------+-----------------------------------------------------+
| Table                     | Op    | Msg_type | Msg_text                                            |
+---------------------------+-------+----------+-----------------------------------------------------+
| vida.countermeasure_costs | check | Warning  | InnoDB: Index "variables_id" is marked as corrupted |
| vida.countermeasure_costs | check | error    | Corrupt                                             |
+---------------------------+-------+----------+-----------------------------------------------------+

Rebooting the mysql service didn't resolve this.

Scouring the net came up with various solutions that were along the lines of converting the table to a MyISAM table for recovery and then back again and using innodb_force_recovery which didn't sound good. Luckily there is an easy solution posted on Stack Overflow that you can perform without any downtime and is quite quick. Simply create a new table and put the data into it before destroying the original and recreating it as so:

CREATE TABLE [new table] LIKE [old table];
INSERT [new table] SELECT * FROM [old table];
DROP TABLE [old table];
CREATE TABLE [old table] like [new table];
INSERT [old table] SELECT * FROM [new table];
DROP TABLE [new table];

References

Last updated: 25th January 2021
First published: 16th August 2018

This blog is created by Stuart Page

I'm a freelance web developer and technology consultant based in Surrey, UK, with over 10 years experience in web development, DevOps, Linux Administration, and IT solutions.

Need support with your infrastructure or web services?

Get in touch