2009-08-28 9 views
4

ibdata1でいくつかの一時テーブルを作成する必要があると思われるInnoDBテーブルの1つに条件付きDELETEオペレーションを実行している間に、ハードディスクがいっぱいになり、mysqlがクラッシュしました。 ibdata1ファイル(〜30 GB)を削除するまで、私は再び起動することができませんでした。私.FRMの全てとなるように、私はinnodb_file_per_tableオプションを使用していたMySQL InnoDBテーブルが壊れています - 修正方法?

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

:私はREPAIR TABLE tablename EXTENDEDを行うときに私が取得(

は今、MySQLが再び始まりますが、データベース内のすべてのテーブルが壊れているように見えます。 /var/mysql/data/mydb/ディレクトリにあるibdファイル(それぞれメタデータとデータを含んでいるはずです)は完全にそのままです(クラッシュ前と同じファイルサイズで):/var/mysql/data/mydb/。誰かがどのようにこれらのテーブルを適切なものもう一度データ?

ありがとう!

+0

破損前にフルバックアップを実行しましたか? – northpole

+0

私はテーブル構造(--no-dataを使用)でバックアップをとったのは、残りのデータが〜100GBという膨大な量であり、別のスクリプトで再投入できるからです。しかし、私はまだそれぞれの.frmファイルを持つこれらの複数GBの.ibdファイルを持っているので、データはまだそこにあると思います。 MySQLが再びそれを読むようにする方法がわからないだけです。 – ash

答えて

3

保証が、あなたが見てみたいことがありますが、テーブルの名前空間を使用する場合でも、https://launchpad.net/percona-data-recovery-tool-for-innodb

+0

最後の手段として、MySQLのrawファイルから直接データを取得することができます(実験されたユーザのみ;-) 次を参照してください。http://www.ekito.fr/portail/repairing-a-badly-hurt- mysql-database?lang = en –

3

は、ibdata1とファイルはまだこれらの名前空間は、このようなマルチバージョンインデックス番号とトランザクションログとして、依存するデータが含まれています。そのファイルを削除して動作させることはできません。

非常に運が良ければ、ibdata1ファイルを復元/復元し、--innodb_force_recovery = 3オプションを使用してmysqlを起動することができます。これにより、トランザクションをロールバック/ロールフォワードしようとせずにmysqlを起動することができます。

まだ問題がある場合は、起動時にmysqlサーバログを投稿する必要があります。

+0

ご協力ありがとうございます。 – ash

関連する問題