InnoDB tables rarely get corrupted, but it can occur when MySQL is randomly killed off by power outages, hardware problems, or the OOM killer running. When this happens, you will see some scary looking log entries in your MySQL error log, such as:
InnoDB: Assertion failure in thread 114256846 in file blah.c line 5423 InnoDB: Failing assertion: page_get_n_recs(page) > 1 InnoDB: We intentionally generate a memory trap. InnoDB: Submit a detailed bug report to http://bugs.mysql.com. InnoDB: If you get repeated assertion failures or crashes, even InnoDB: immediately after the mysqld startup, there may be InnoDB: corruption in the InnoDB tablespace. Please refer to InnoDB: http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html InnoDB: about forcing recovery. mysqld got signal 6 ; This could be because you hit a bug. It is also possible that this binary or one of the libraries it was linked against is corrupt, improperly built, or misconfigured. This error can also be caused by malfunctioning hardware. We will try our best to scrape up some info that will hopefully help diagnose the problem, but since we have already crashed, something is definitely wrong and this may fail. ... obscure backtrace message ... The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html contains information that should help you find out what is causing the crash.
Usually, you can get MySQL back up in recovery mode pretty quickly by setting the following variable in /etc/my.cnf under the section [mysqld]:
vim /etc/my.cnf [mysqld] innodb_force_recovery = 1
Then try to restart MySQL:
service mysql restart
Once you have MySQL running, you can now check to see what tables may be corrupted:
mysqlcheck -c --all-databases
After you find the database that is corrupted, you can try to repair it by running:
mysqlcheck -r your_database_name ie: mysqlcheck -r drupal
Now confirm that the databases and tables are now showing ‘OK’:
mysqlcheck -c --all-databases
If all is well, take MySQL out of recovery mode by removing the following variable from /etc/my.cnf:
vim /etc/my.cnf # Remove innodb_force_recovery = 1
Finally, restart MySQL and check your logs to ensure that there are no further errors being recorded:
service mysql restart