MySQLでxx.frm、xx.idbファイルからデータを復旧させる方法。
(※エクスポートしてない場合)
◆復旧先は、復旧元と同じ構造、名称のデータベースのテーブルというのが前提。
1.復旧先のデータベースに復旧したいテーブルをCreateする。
↑Createすると、xx.frmとxx.idbファイルが作成される。
2.ALTER TABLE 復旧したいテーブル名 DISCARD TABLESPACE;
↑xx.idbファイルが削除される
3.復旧元のxx.frm、xx.idb ファイルを復旧先にコピー
例)xampp使用時は・・
c:\xampp\mysql\data\データベース\xx.frm と
c:\xampp\mysql\data\データベース\xx.idb
4.ALTER TABLE baseball_users IMPORT TABLESPACE;
↑xx.idbがインポートされる。
↓に上記操作の方法と説明が書いてある。。
https://dev.mysql.com/doc/refman/5.6/ja/alter-table.html
自分の環境ではインストールできなかったが、
xx.frmファイルからCREATE文を抜き出せるユーティリティがあるようで。
そのユーティリティをインストールしてmysqlfrmコマンドを実行するとCREATE文を抜き出してくれるらしい。
また、どこかのサイトの記事でxx.frmファイルをcatコマンドで見ればCREATE文が見られる。
と書いてあったので試したが、カラム名の羅列は見られたが、CREATE文は見れなかった。。
<上手くいかなかった経緯と原因>
Windows7からWindows10へアップグレードしたのはいいが。。
XAMPPを使っていて。
XAMPPフォルダ配下をバックアップ取ったからいいだろうと・・エクスポートしなかった。。
MySQLだし、ファイルコピーすればいけるでしょ。と軽く考えてた。
Windows10上でいざデータを戻そうと思い、方法確認のためググると・・そんな単純な話ではないようだぞ。
↓こちらを参考にさせていただきました。
https://qiita.com/___uhu/items/74168be48c05638c7ac5
方法が無くはないということで↑を真似してやったが、上手いこといかなかった。
断念して、レンタルサーバー上のデータをせこせことローカルに移設した。
が、納得できず。
なので再度、うまくいかなかった方法で実施してみることにした。
そういえばデータを移設したとき、あるテーブルのカラムの並び順が逆になっていた。
上記方法で、そのテーブルのデータ復旧を試みたんだ。
だからうまいこと行かなかったのでは・・。
そーいえば。。
開発中にカラムの順番を変えた覚えがある。
その時テーブル構造を最新状態表示にしていなかったようで。。
その状態でテーブル構造からDDLを逆引きしたため、カラム順が異なっていたのが原因。
↑これは自分のみが納得する話やな。。
そのためWindows7のテーブル構造と、Windows10に作成したテーブル構造が完全一致せず。。
違う入れ物にデータを入れようとしたのでうまくいかなかったのだな。。
と、原因がわかってすっきり。
だいたい原因は己にあるのだよ。。ψ(`∇´)ψ
(※エクスポートしてない場合)
◆復旧先は、復旧元と同じ構造、名称のデータベースのテーブルというのが前提。
1.復旧先のデータベースに復旧したいテーブルをCreateする。
↑Createすると、xx.frmとxx.idbファイルが作成される。
2.ALTER TABLE 復旧したいテーブル名 DISCARD TABLESPACE;
↑xx.idbファイルが削除される
3.復旧元のxx.frm、xx.idb ファイルを復旧先にコピー
例)xampp使用時は・・
c:\xampp\mysql\data\データベース\xx.frm と
c:\xampp\mysql\data\データベース\xx.idb
4.ALTER TABLE baseball_users IMPORT TABLESPACE;
↑xx.idbがインポートされる。
↓に上記操作の方法と説明が書いてある。。
https://dev.mysql.com/doc/refman/5.6/ja/alter-table.html
自分の環境ではインストールできなかったが、
xx.frmファイルからCREATE文を抜き出せるユーティリティがあるようで。
そのユーティリティをインストールしてmysqlfrmコマンドを実行するとCREATE文を抜き出してくれるらしい。
また、どこかのサイトの記事でxx.frmファイルをcatコマンドで見ればCREATE文が見られる。
と書いてあったので試したが、カラム名の羅列は見られたが、CREATE文は見れなかった。。
<上手くいかなかった経緯と原因>
Windows7からWindows10へアップグレードしたのはいいが。。
XAMPPを使っていて。
XAMPPフォルダ配下をバックアップ取ったからいいだろうと・・エクスポートしなかった。。
MySQLだし、ファイルコピーすればいけるでしょ。と軽く考えてた。
Windows10上でいざデータを戻そうと思い、方法確認のためググると・・そんな単純な話ではないようだぞ。
↓こちらを参考にさせていただきました。
https://qiita.com/___uhu/items/74168be48c05638c7ac5
方法が無くはないということで↑を真似してやったが、上手いこといかなかった。
断念して、レンタルサーバー上のデータをせこせことローカルに移設した。
が、納得できず。
なので再度、うまくいかなかった方法で実施してみることにした。
そういえばデータを移設したとき、あるテーブルのカラムの並び順が逆になっていた。
上記方法で、そのテーブルのデータ復旧を試みたんだ。
だからうまいこと行かなかったのでは・・。
そーいえば。。
開発中にカラムの順番を変えた覚えがある。
その時テーブル構造を最新状態表示にしていなかったようで。。
その状態でテーブル構造からDDLを逆引きしたため、カラム順が異なっていたのが原因。
↑これは自分のみが納得する話やな。。
そのためWindows7のテーブル構造と、Windows10に作成したテーブル構造が完全一致せず。。
違う入れ物にデータを入れようとしたのでうまくいかなかったのだな。。
と、原因がわかってすっきり。
だいたい原因は己にあるのだよ。。ψ(`∇´)ψ
お役にたっていたらうれしいです。