web-dev-qa-db-ja.com

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

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

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

* .frm、*。ibd

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

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

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

15
cyberwani

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 Architecture

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(データ回復は必要な知識を組み込んでいます)責任を持って

17
RolandoMySQLDBA