ibdファイルからibdata1なしでデータフォルダからMySQLデータベースを回復します


15

WAMPディレクトリが誤って別のユーザーによって削除されます。MySQLのデータフォルダのみが使用可能です。また、データベースフォルダー( "\ bin \ mysql \ mysql5.6.12 \ data \"内のフォルダーとデータベース名)のみが使用可能です。「\ bin \ mysql \ mysql5.6.12 \ data \」のルートにある「ibdata1」を含むすべてのファイルも削除されます。

データベースフォルダーには、以下の拡張子を持つファイルのみが含まれます。

* .frm、*。ibd

および「db.opt」ファイル。

データベースをどのように回復できますか?

私はすでにbdata1を回復しようとしました。しかし、それを取り戻すことができません。また、一部のデータベースにはMYISAMも含まれています。

回答:


16

MyISAM

MyISAMテーブルmydb.mytableの場合、3つのファイルが必要です

  • \bin\mysql\mysql5.6.12\data\mydb\mytable.frm
  • \bin\mysql\mysql5.6.12\data\mydb\mytable.MYD
  • \bin\mysql\mysql5.6.12\data\mydb\mytable.MYI

各ファイルには必要なデータ、メタデータ、およびインデックス情報が含まれているため、テーブルとして既にアクセス可能である必要があります。まとめて、テーブルを形成します。アクセスする外部ストレージエンジンのメカニズムはありません。

InnoDB

このInnoDBの図解をご覧ください

InnoDBアーキテクチャ

ibdata1を.ibdファイルに添付する唯一のものは、データディクショナリです。

あなたの使命は、あなたがそれを受け入れることに決めた場合、各テーブルを作成し、 .ibd

何かをする前に、「\ bin \ mysql \ mysql5.6.12 \ data」の完全なコピーを別の場所に作成します

サンプルはこちら

mydbテーブルを含むデータベースがあるとしますmytable。これの意味は

  • フォルダーがあります \bin\mysql\mysql5.6.12\data\mydb
  • そのフォルダー内には、
    • mytable.frm
    • mytable.ibd

が必要.frmです。私の投稿を見ると、どのように.frmファイルからテーブルスキーマを抽出できますか?、テーブルの作成に必要なSQLを生成できるMySQLユーティリティをダウンロードできます。

あなたは今、次のことをする必要があります

  • 移動mytable.ibd\bin\mysql\mysql5.6.12\data
  • SQLを実行してInnoDBテーブルを作成します
  • mysqlにログインして実行しますALTER TABLE mydb.mytable DISCARD TABLESPACE;(これによりが削除されます\bin\mysql\mysql5.6.12\data\mydb\mytable.ibd
  • コピー\bin\mysql\mysql5.6.12\data\mytable.ibd\bin\mysql\mysql5.6.12\data\mydb
  • mysqlにログインして実行しますALTER TABLE mydb.mytable IMPORT TABLESPACE;(これ\bin\mysql\mysql5.6.12\data\mydb\mytable.ibdによりデータディクショナリに登録されます)

この後、テーブルmydb.mytableは完全にアクセス可能になります。次のコマンドを実行するだけで、そのアクセシビリティをテストできます。

SELECT * FROM mydb.mytable LIMIT 10;

試してみる !!!

DRINK(データリカバリには必要な知識が組み込まれています)


この素晴らしい答えを完了するには、innodbの場合、テーブルスペースを破棄する前にテーブルを参照するFK制約を削除する必要があります。インポート後、FKを再作成する必要があります。
SebaGra

表スペースのインポート後information_schema.key_column_usage(おそらく他のテーブルも)最初のデータは返されないselectため、少なくとも1つのクエリを実行し、次のクエリが機能するまで数秒待つ必要があります。(MySQLの14.14按分5.7.19版、Linuxベースglibc2.12(x86_64のために)使用EditLineラッパー)
user3338098
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.