September 1, 2014

How Percona Server handles data corruption more gracefully

I got a question a while ago about how Percona Server handles corrupted data more gracefully than the standard MySQL server from Oracle. The short version is that it won’t crash the whole server.

With standard MySQL from Oracle, if any page of data in InnoDB is found to be corrupt, the entire instance will crash forcefully. This is a good policy if you want to treat your entire data set as a single unit, which is either usable or not. However, this does not reflect reality for many users, who have a lot of data collocated in a single instance. In such cases, it is desirable for the server to continue running, so the corruption in one database does not affect the others.

Percona Server handles corruption more gracefully, if you enable it, by simply marking the single table as corrupt, and not crashing the entire server.

The relevant documentation is here.

About Baron Schwartz

Baron is the lead author of High Performance MySQL.
He is a former Percona employee.

Comments

  1. Dave Juntgen says:

    Baron – How does InnoDB determine if a page is correct?

    Here is a scenario for you:

    Innodb writes page, RAID control goes haywire and writes bad data to disk but returns success anyway. Innodb then reads corrupt page from disk…at this point, what happens?

  2. Dave, that is exactly the scenario that we are trying to handle. Each page of data has a checksum. InnoDB checks the checksum when it reads the page off the disk. If the checksum does not match the contents of the page, then the page is corrupt. Standard InnoDB will now crash the server hard.

Speak Your Mind

*