How do I repair an InnoDB table?

mysql repair table
how to repair corrupt innodb table in mysql
1034 index for table 'db' is corrupt; try to repair it
mysql reorg table
mysql myisam rebuild index
mysql 5.7 mysqlcheck
the storage engine for the table doesn't support repair
mysql recreate

We (apparently) had poorly executed of our Solaris MySQL database engine last night. At least some of the InnoDB tables are corrupted, with timestamp out of order errors in the transaction log, and a specific error about the index being corrupted.

We know about the tools available for MyISAM table repairs, but cannot find anything for InnoDB.

Side note: attempting a table optimize (in my attempt to rebuild the corrupted index) causes the database server to crash.

First of all stop the server and image the disc. There's no point only having one shot at this. Then take a look here.

How do I repair an InnoDB table?, Step 4 – Restart MySQL in normal mode. Remove the innodb_force_recovery and skip-grant-tables from my.inifile and then restart the MySQL; In this way, you can repair InnoDB Tables from MySQL. Automatic way to repair InnoDB Tables. To repair InnoDB Tables in MySQL Database, one can always use professional software like Aryson MySQL Database Repair.

stop your application...or stop your slave so no new rows are being added

create table <new table> like <old table>;
insert <new table> select * from <old table>;
truncate table  <old table>;
insert <old table> select * from <new table>;

restart your server or slave

How to Repair InnoDB Tables in MySQL, First of all stop the server and image the disc. There's no point only having one shot at this. Then take a look here. How to repair InnoDB tables in MySQL. 1. In a transaction, group the sets that come with DML tasks using parentheses and commit or start transaction statements.; 2. If you have more frequently used columns, you should point to the primary key for a specific table.

The following solution was inspired by Sandro's tip above.

Warning: while it worked for me, but I cannot tell if it will work for you.

My problem was the following: reading some specific rows from a table (let's call this table broken) would crash MySQL. Even SELECT COUNT(*) FROM broken would kill it. I hope you have a PRIMARY KEY on this table (in the following sample, it's id).

  1. Make sure you have a backup or snapshot of the broken MySQL server (just in case you want to go back to step 1 and try something else!)
  2. CREATE TABLE broken_repair LIKE broken;
  3. INSERT broken_repair SELECT * FROM broken WHERE id NOT IN (SELECT id FROM broken_repair) LIMIT 1;
  4. Repeat step 3 until it crashes the DB (you can use LIMIT 100000 and then use lower values, until using LIMIT 1 crashes the DB).
  5. See if you have everything (you can compare SELECT MAX(id) FROM broken with the number of rows in broken_repair).
  6. At this point, I apparently had all my rows (except those which were probably savagely truncated by InnoDB). If you miss some rows, you could try adding an OFFSET to the LIMIT.

Good luck!

2.11.12 Rebuilding or Repairing Tables or Indexes, Steps to follow to Repair InnoDB Tables in MySQL. Install InnoDB Table Repair Tool and Run. Click on the Open button and select InnoDB Table. How to repair corrupt innodb table in mysql -Best Practices It is a good practice to group sets associated with DML tasks into transactions. This can be done by bracketing the DML Using most frequently queried columns or column, specify the primary key for each table. You can also use an

Here is the solution provided by MySQL: http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html

Best Ways to Repair InnoDB Table corruption in MySQL Database, If you need to rebuild an InnoDB table because a CHECK TABLE operation indicates that a table upgrade is required, use mysqldump to create a dump file and  If you're getting bombarded with queries and you need to be able to connect to the database to make some table changes, set a different port number in your /etc/my.cnf file, start the database, make any changes, then update the port back to normal (master-port = 3306) and restart. 7. Corrupt InnoDB tables.

See this article: http://www.unilogica.com/mysql-innodb-recovery/ (It's in portuguese)

Are explained how to use innodb_force_recovery and innodb_file_per_table. I discovered this after need to recovery a crashed database with a single ibdata1.

Using innodb_file_per_table, all tables in InnoDB will create a separated table file, like MyISAM.

Tutorial, The data stored on the disk is arranged and organized by InnoDB tables to optimize primary key-based queries. Each table has primary key index  InnoDB: Cannot find table test/child2 from the internal data dictionary InnoDB: of InnoDB though the .frm file for the table exists. Here, the most common issue is that a partially executed drop or alter statement did not result in all the table's files being removed properly.

How To Fix Corrupted Tables in MySQL, frm files of InnoDB tables, or you have moved .frm files to another database? or, the table contains indexes that this version of the engine doesn't  There is rarely a need to repair InnoDB tables, as InnoDB features a crash recovery mechanism that can resolve most issues when the server is restarted. However, if you do encounter a situation where you need to rebuild a corrupted InnoDB table, the MySQL documentation recommends using the “Dump and Reload” method.

Recover crashed Innodb tables on MySQL database server., There is rarely a need to repair InnoDB tables, as InnoDB features a crash recovery mechanism that can resolve most issues when the server is  Recover crashed Innodb tables process will help you to recover any critical tables during innodb crash. One of the dangerous issue you will face on a MySQL server is innodb crash, no matter how important the data is and what tweaks you have on the database server crash can happen sometimes.

How can I fix database corruption on an InnoDB table?, Recover Crashed innodb tables Lost valuable database ? Hire us we The above command will repair all the databases on the server. If there  mysqlcheck --repair provides command-line access to the REPAIR TABLE statement. This can be a more convenient means of repairing tables because you can use the --databases or --all-databases option to repair all tables in specific databases or all databases, respectively: Press CTRL+C to copy.

Comments
  • Restore from backups. You have backups, right?
  • It seems the link has different content, doesn't it?
  • Thanks - I found this solution quite useful because it doesn't require the user to restart the server or work outside the MySQL environment
  • not sure why, but I had to drop the old table and then recreate it using LIKE instead of running truncate in the 3rd step. Fantastic solution.
  • Even after truncate, my old table was corrupted. I dropped it and renamed <new table> to <old table> and it fixed everything, THANKS! Note: some rows were lost in the operation....but I guess that they were the corrupted rows, so probably not recoverable in any way
  • Downvoting as you clearly have no idea what you are doing. Deleting the ib_logfiles is just inviting yourself into more problems
  • In any case: innodb_force_recovery=6 is no fun and should avoided if possible - always try lower values first!