MySQL データ復旧 (innoDB) - .frm ファイルは失われているが、ibdata はそのまま

MySQL データ復旧 (innoDB) - .frm ファイルは失われているが、ibdata はそのまま

最近のサーバーのトラブルで、一見無傷の ibdata ファイルが残っていましたが、.frm を含むディレクトリは半分しか残っていません。このすべてを新しい MySQL インストールにコピーし、.frm ファイルが残っているデータベースを正常に回復しました。質問は、何らかの方法で ibdata ファイルから .frm ファイルを再生成できるかどうかです。または、何らかの方法で同じデータベースの開発バージョンから .frm ファイルを変更して、回復に使用できるようにすることはできますか。

残念ながら、バックアップからの復元は実行可能なオプションではありません。

明確にするために編集しました: 同じスキーマを含むローカルで生成された .frm ファイルを使用してデータベースを回復しようとしましたが、innodb_force_recovery = 1 でも失敗しました。

答え1

実際にこれをやったことはないのですが、あなたの質問は私が使っているツールに関係しているので興味がありました。これは実際に可能なようです。例を挙げます。

http://www.chriscalender.com/?p=28

.ibd ファイルしかないときにテーブルを復元する必要がある場合があります。この場合、新しいインスタンスにロードしようとすると、テーブル ID が一致しないというエラーが発生する可能性があります。これを回避する方法はありません。

ただし、この問題を回避する方法が 2 つ見つかりました。

注: これらの方法を使用して回復するテーブルごとに、.ibd ファイルと CREATE TABLE ステートメントが必要になります。

  • 内部 InnoDB テーブル カウンターをシミュレートします。つまり、テーブル ID の内部ポインタが (1 - id_of_ibd_table_you_need_to_restore) に等しくなるまで、作業テーブルを作成します (innodb_file_per_table を有効にして)。(方法 1 を参照)
  • .ibd ファイルを手動で 16 進編集し、テーブル ID を変更します (方法 2 を参照)。

手順自体は数ページにわたるため、ここには貼り付けていません。

もう一つの関連投稿:http://www.mysqlperformanceblog.com/2011/05/13/connecting-orphaned-ibd-files/

それがうまくいくかどうか聞いてみたいと思います。複数の人がそれをうまく使っているようです。

関連情報