views:

3314

answers:

2

Hello all,

While performing a conditional DELETE operation in one of my InnoDB tables, which apparently required some temporary table to be created in ibdata1, the hard disk filled up and mysql crashed. I couldn't get it to start again until I deleted the ibdata1 file (~30 GB).

Now mysql starts again, but all the tables in the database seem to be corrupt (when I do a REPAIR TABLE tablename EXTENDED I get:

+-----------------------------------+--------+----------+---------+
| Table       | Op     | Msg_type | Msg_text                      |
+-----------------------------------+--------+----------+---------+
| mydb.table1 | repair | Error    | Unknown table engine 'InnoDB' |
| mydb.table1 | repair | error    | Corrupt                       |
+-----------------------------------+--------+----------+---------+

I was using innodb_file_per_table option so that all of my .frm and .ibd files (which are supposed to contain metadata and data, respectively) are all intact (with the same filesizes they had before the crash), in the directory: /var/mysql/data/mydb/. Does anyone know how I could get mysql to recognize these tables with the appropriate data once again?

Thanks!

+1  A: 

No guarantees, but you may want to look at: http://code.google.com/p/innodb-tools/

RC
+1  A: 

even when you use table namespaces, the ibdata1 file still contains data that those namespaces depend on, such as the multiversion index number and the transaction log. you can't just delete that file and expect it to work.

if you're extremely lucky, you can restore/undelete the ibdata1 file and start mysql with the --innodb_force_recovery=3 option. this will allow mysql to start without attempting to rollback/rollforward any transactions.

if you still hav eproblems, you need to post your mysql server log from startup.

longneck
Thanks for your help.
Jasie