MySQLは.frm和ibdファイルリカバリデータ
4694 ワード
前言
MySQLのデータベースでは、インストールディレクトリの下にあるdataフォルダの下にある同命フォルダに関連ファイルが格納されており、ストレージエンジンによって作成されたテーブルによってファイルが異なります.次に、これらのデータベースファイルを認識します.
db.opt
ライブラリのデフォルトの文字セット符号化と文字セットソート規則を記録するために使用されます.すなわち、データベースがデフォルトの文字セットとソートルールを指定する場合、後続のテーブルが文字セットとソートルールを指定していない場合、新しいテーブルはdbを採用する.optファイルで指定したプロパティ.
.frm
テーブルに関するメタデータ情報はすべて格納.frmファイルでは、主にテーブル構造の定義情報であり、どのストレージエンジンでもテーブル名で命名される.frmファイル.
MYDと.MYI
.MYD:MY Dataは、MyISAMストレージエンジン専用のMyISAMテーブルを格納ためのデータである.MYI:MY Indexは、MyISAMストレージエンジンに特化した主なMyISAMテーブルを格納するインデックス関連情報でもある.
ibdと.ibdata
どちらもInnoDBストレージエンジン専用のデータベースファイルです.共有テーブル空間を利用する場合、全てのInnoDBテーブルのデータが格納される.ibdataでは、テーブルがますます多くなると、このファイルは大きくなります.対応するibdとは,表領域を独占する場合のInnoDB表を用いたデータファイルである.テーブルスペースを独り占めする方法に変更するのはmy.iniプロファイルにこのバーを追加/変更するには、
もちろん、ユニークな表空間を開いても、ibdataファイルもますます大きくなります.このファイルには保存されているからです.変更バッファ デュアルライトバッファ 取り消しログ これらのものはいったい何ですか.私も知らない233
MyISAMストレージエンジンであれば、直接コピーします.frm、.MYD、.MYIは新しいライブラリフォルダの下に行けばいいので、便利で簡単に使えます.しかし、現在MySQLは構成されていない場合、デフォルトのストレージエンジンはInnoDBであり、優位性があることを示しています.具体的に両者の違いは別編やネットで資料を調べてみましょう.三言二言でははっきり言えませんが、ここでは展開しません.もちろん、このブログにアクセスできるのはInnoDBテーブルのデータ復旧を見たいに違いない.特に紛失した.ibdataファイルの場合.
一、回復表構造
最も重要なことは、テーブル構造を復元することです.幸いにも当時のテーブル構造を保持していれば、このステップはスキップできます.
1.1同じ名前のテーブルを任意に作成する
1.2 mysqlサービスのクローズ
1.3バックアップのコピーfrmは新しいテーブルを上書きする.frm
1.4 mysqlサービスを開始する
1.5 mysqlインストールディレクトリdataフォルダの下にテキストエディタで開く.Errファイル
これはmysqlのエラーログで、
1.6現在のテーブルを削除し、6つのフィールドを持つ同じ名前のテーブルを新規作成する
1.7手順1.2-1.3を繰り返す
プロファイルを変更するmy.ini[mysqld]で
1.8 mysqlサービスを開始し、テーブル構造を確認し、テーブル構造が回復したことを発見する
表構造を導出、コマンドプロンプトの下に
1.9 mysqlサービスを停止し、プロファイルmyを変更する.ini
2.0 mysqlサービスを起動し、このテーブルを削除し、取得したテーブル文でテーブルを新規作成する
これで、テーブル構造は完全に復元されました.
二、回復表データ
2.1表領域の分離
現在のibdのデータファイルと.frm分離.
2.2バックアップのコピーibdファイルは新しいテーブルデータを上書きする
2.3新しい接続の再確立
三、後の話
ネット上でvimで16進数で開く人がいます.ibdファイルは、表領域IDを見てバックアップする.ibdファイルの上書き後の表領域IDの変更は新しい.ibdファイルのIDは、データファイルと表領域の接続を再確立してデータを復元することもできます.Windows環境ではWinHexでこの目的を達成することができ、聞こえることも可能です.私は怠け者なのでやってみません.興味のある余力のある人はやってみてください.
MySQLのデータベースでは、インストールディレクトリの下にあるdataフォルダの下にある同命フォルダに関連ファイルが格納されており、ストレージエンジンによって作成されたテーブルによってファイルが異なります.次に、これらのデータベースファイルを認識します.
db.opt
ライブラリのデフォルトの文字セット符号化と文字セットソート規則を記録するために使用されます.すなわち、データベースがデフォルトの文字セットとソートルールを指定する場合、後続のテーブルが文字セットとソートルールを指定していない場合、新しいテーブルはdbを採用する.optファイルで指定したプロパティ.
.frm
テーブルに関するメタデータ情報はすべて格納.frmファイルでは、主にテーブル構造の定義情報であり、どのストレージエンジンでもテーブル名で命名される.frmファイル.
MYDと.MYI
.MYD:MY Dataは、MyISAMストレージエンジン専用のMyISAMテーブルを格納ためのデータである.MYI:MY Indexは、MyISAMストレージエンジンに特化した主なMyISAMテーブルを格納するインデックス関連情報でもある.
ibdと.ibdata
どちらもInnoDBストレージエンジン専用のデータベースファイルです.共有テーブル空間を利用する場合、全てのInnoDBテーブルのデータが格納される.ibdataでは、テーブルがますます多くなると、このファイルは大きくなります.対応するibdとは,表領域を独占する場合のInnoDB表を用いたデータファイルである.テーブルスペースを独り占めする方法に変更するのはmy.iniプロファイルにこのバーを追加/変更するには、
Innodb_file_per_table=1
注意:筆者が使用するMySQL-5.7はデフォルトのテーブルスペースであり、プロファイルに追加する必要はありません.もちろん、ユニークな表空間を開いても、ibdataファイルもますます大きくなります.このファイルには保存されているからです.
MyISAMストレージエンジンであれば、直接コピーします.frm、.MYD、.MYIは新しいライブラリフォルダの下に行けばいいので、便利で簡単に使えます.しかし、現在MySQLは構成されていない場合、デフォルトのストレージエンジンはInnoDBであり、優位性があることを示しています.具体的に両者の違いは別編やネットで資料を調べてみましょう.三言二言でははっきり言えませんが、ここでは展開しません.もちろん、このブログにアクセスできるのはInnoDBテーブルのデータ復旧を見たいに違いない.特に紛失した.ibdataファイルの場合.
一、回復表構造
最も重要なことは、テーブル構造を復元することです.幸いにも当時のテーブル構造を保持していれば、このステップはスキップできます.
1.1同じ名前のテーブルを任意に作成する
CREATE TABLE weibo_tweets(a int)ENGINE=InnoDB;
1.2 mysqlサービスのクローズ
net stop mysql
1.3バックアップのコピーfrmは新しいテーブルを上書きする.frm
1.4 mysqlサービスを開始する
net start mysql
1.5 mysqlインストールディレクトリdataフォルダの下にテキストエディタで開く.Errファイル
これはmysqlのエラーログで、
2018-01-09T08:19:46.170814Z 3 [Warning] InnoDB: Table data_rec/weibo_tweets contains 1 user defined columns in InnoDB, but 6 columns in MySQL. Please check INFORMATION_SCHEMA.INNODB_SYS_COLUMNS
などのレコードが見つかり、元のテーブルに6つのフィールドがあることがわかりました.1.6現在のテーブルを削除し、6つのフィールドを持つ同じ名前のテーブルを新規作成する
mysql> DROP TABLE weibo_tweets;
Query OK, 0 rows affected (0.26 sec)
mysql>CREATE TABLE weibo_tweets(a1 int,a2 int,a3 int,a4 int,a5 int,a6 int)ENGINE=InnoDB;
Query OK, 0 rows affected (0.66 sec)
1.7手順1.2-1.3を繰り返す
プロファイルを変更するmy.ini[mysqld]で
innodb_force_recovery=6
を追加/変更1.8 mysqlサービスを開始し、テーブル構造を確認し、テーブル構造が回復したことを発見する
mysql> desc weibo_tweets;
+-------------+---------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| uid | varchar(10) | NO | | NULL | |
| content | varchar(1000) | YES | | NULL | |
| pub_time | varchar(20) | YES | | NULL | |
| tool | varchar(50) | YES | | NULL | |
| create_time | datetime | YES | | CURRENT_TIMESTAMP | |
+-------------+---------------+------+-----+-------------------+----------------+
6 rows in set, 1 warning (0.01 sec)
表構造を導出、コマンドプロンプトの下に
mysqldump -uroot -proot data_rec weibo_twets > e:\tweets.sql
を入力.sqlファイルにテーブル作成文が見つかりました.あるいは、navicatなどのデータベース管理ソフトウェアでこのテーブルを見つけ、オブジェクト情報にDDLタブの内容をコピーすることもできます.1.9 mysqlサービスを停止し、プロファイルmyを変更する.ini
innodb_force_recovery=0
を修正するか、直接注釈します.2.0 mysqlサービスを起動し、このテーブルを削除し、取得したテーブル文でテーブルを新規作成する
これで、テーブル構造は完全に復元されました.
二、回復表データ
2.1表領域の分離
現在のibdのデータファイルと.frm分離.
ALTER TABLE weibo_tweets DISCARD TABLESPACE;
2.2バックアップのコピーibdファイルは新しいテーブルデータを上書きする
2.3新しい接続の再確立
ALTER TABLE weibo_tweets IMPORT TABLESPACE;
これで、データの復元が完了しました.三、後の話
ネット上でvimで16進数で開く人がいます.ibdファイルは、表領域IDを見てバックアップする.ibdファイルの上書き後の表領域IDの変更は新しい.ibdファイルのIDは、データファイルと表領域の接続を再確立してデータを復元することもできます.Windows環境ではWinHexでこの目的を達成することができ、聞こえることも可能です.私は怠け者なのでやってみません.興味のある余力のある人はやってみてください.