web-dev-qa-db-ja.com

MySQLデータベースを.myd、.myi、.frmファイルから回復する方法

.myd.myi.frmファイルから私のMySQLデータベースのひとつを復元するにはどうすればいいですか?

175
chandrajeet

これらがMyISAMテーブルの場合、.FRM、.MYD、および.MYIファイルをデータベースディレクトリ(たとえば、/var/lib/mysql/dbname)に展開すると、そのテーブルが使用可能になります。同じデータベース、同じサーバー、同じMySQLバージョン、または同じアーキテクチャーである必要はありません。フォルダの所有権を変更する必要があるかもしれません(例:chown -R mysql:mysql /var/lib/mysql/dbname

パーミッション(GRANTなど)はmysqlデータベースの一部です。そのため、それらはテーブルと一緒に復元されません。適切なGRANTステートメントを実行してユーザーを作成したり、アクセス権を付与したりする必要があるかもしれません(mysqlデータベースを復元することは可能ですが、MySQLバージョンおよび必要なmysql_upgradeユーティリティーの実行には注意が必要です)。

実際には、おそらく.FRM(テーブル構造)と.MYD(テーブルデータ)が必要ですが、.MYI(インデックス)を再構築するにはテーブルを修復する必要があります。

唯一の制約は、ダウングレードする場合は、リリースノートを確認すること(そしておそらくrepair tableを実行すること)をお勧めします。より新しいMySQLバージョンはもちろん機能を追加します。

[明らかなはずですが、テーブルを組み合わせて組み合わせる場合、それらのテーブル間の関係の整合性があなたの問題です。 MySQLは気にしませんが、あなたのアプリケーションとあなたのユーザは気にしません。また、このメソッドはInnoDBテーブルに対してはまったく機能しません。 MyISAMだけですが、あなたが持っているファイルを考えると、あなたはMyISAMを持っています。]

164
derobert

MYIファイルを再構築したい場合は、REPAIR TABLEの正しい使い方は次のとおりです。

REPAIR TABLEの一部のUSE_FRM。

そうでなければ、おそらく別のエラーが発生するでしょう。

23
mcardellg

私はちょうどこれを解決するために発見しました。 Windows 7上でMySQL 5.1または5.6を使用しています。

  1. "C:\ Program Data\MySQL\MSQLServer 5.1\Data"にある古いファイルから。frmファイルとibdata1をコピーします。
  2. 現在のSQLインスタンスのSQLサーバーインスタンスを停止します。
  3. "C:\ Program Data\MySQL\MSQLServer 5.1\Data"にあるデータフォルダーに移動します。
  4. 回復したいファイルからibdata1.frmファイルを含む---(フォルダ)を貼り付けます。
  5. MySQLインスタンスを起動します。

この回復のために.MYIおよび.MYDファイルを見つける必要はありません。

22
alnel

注意すべき点が1つあります。

.FRMファイルにはテーブル構造が含まれており、MySQLバージョンに固有のものです。

.MYDファイルはバージョンに固有ではなく、少なくともマイナーバージョンではありません。

.MYIファイルは特定のものですが、他の回答が言うように省略してREPAIR TABLEで再生成することができます。

この答えのポイントは、あなたがあなたのテーブルのスキーマダンプを持っているなら、あなたはそれを使ってテーブル構造を生成し、そしてあなたのバックアップでそれらの.MYDファイルを置き換え、MYIファイルを削除し、そしてそれらを修復できることを知らせることです。すべて。これにより、mysqldumpを使用せずに、バックアップを別のMySQLバージョンに復元したり、データベースをまとめて移動したりできます。大規模なデータベースを移動するときに、この超便利な方法がわかりました。

14
Brent

シンプル!ダミーデータベースを作成する(abcなど)

これらすべての.myd、.myi、.frmファイルをmysql\data\abcにコピーします。mysql\ data \は、すべてのデータベースの.myd、.myi、.frmが格納されている場所です。

それからphpMyadminに行き、db abcに行き、そしてあなたのデータベースを見つける。

12
Vishal

私はあなたがMySQLの内側から修復できる。

MySQLからのこれらのタイプのエラーメッセージを見れば:データベースはクエリを実行できませんでした(クエリ)1016:ファイルを開けません: 'sometable.MYI'。 (エラー番号:145)エラーメッセージ:1034:テーブルのキーファイルが正しくありません: 'sometable'。それを修復してみてください。おそらくクラッシュしたテーブルや破損したテーブルがあるでしょう。

あなたはこのようにmysqlプロンプトからテーブルをチェックして修復することができます。

check table sometable;
+------------------+-------+----------+----------------------------+
| Table | Op | Msg_type | Msg_text | 
+------------------+-------+----------+----------------------------+ 
| yourdb.sometable | check | warning | Table is marked as crashed | 
| yourdb.sometable | check | status | OK | 
+------------------+-------+----------+----------------------------+ 

repair table sometable;
+------------------+--------+----------+----------+ 
| Table | Op | Msg_type | Msg_text | 
+------------------+--------+----------+----------+ 
| yourdb.sometable | repair | status | OK | 
+------------------+--------+----------+----------+

そして今あなたのテーブルは問題ないはずです。

check table sometable;
+------------------+-------+----------+----------+ 
| Table | Op | Msg_type | Msg_text |
+------------------+-------+----------+----------+ 
| yourdb.sometable | check | status | OK |
+------------------+-------+----------+----------+
7
Elzo Valugi

それが正確に同じバージョンのmySQLであり、そのディレクトリ内のすべての関連ファイルを保持している限り、データフォルダの適切な名前のサブディレクトリディレクトリにファイルをコピーできます。すべてのファイルが揃っていない場合は、問題があると確信しています。

5
cgp

.sqlディレクトリにアクセスする必要なく、ファイルを.sqlファイルに変換するソリューションを見つけました(その後、/varファイルをサーバーにインポートしてデータベースを回復できます)。したがって、これを行うにはサーバー管理者である必要はありません。どちらでも。

コンピュータにXAMPPまたはMAMPがインストールされている必要があります。

  • XAMPPをインストールした後、インストールディレクトリ(通常はC:\XAMPP)とサブディレクトリmysql\dataに移動します。フルパスはC:\XAMPP\mysql\dataであるべきです
  • あなたの中にはあなたが作成した他のデータベースのフォルダが表示されます。そこに.myd.myiおよび.frmファイルでいっぱいのフォルダーをコピーして貼り付けます。そのフォルダへのパスは

    C:\XAMPP\mysql\data\foldername\.mydfiles

  • ブラウザでlocalhost/phpmyadminにアクセスしてください。 mysql\dataフォルダに貼り付けたばかりのデータベースを選択し、ナビゲーションバーの[エクスポート]をクリックします。エクスポートを.sqlファイルとして選択します。ファイルを保存する場所を尋ねるポップアップが表示されます。

そしてそれはそれです! .sql.mydおよび.myiファイルであったデータベースを含む.frmファイルができました。新しいデータベースを作成してナビゲーションバーの[インポート]をクリックし、インポートする手順に従って、phpMyAdminを使用して別のサーバーにインポートできます。

4
Kaspar Lee

上の記述は私のために物事を動かすのに十分ではなかった(おそらく密かにまたは怠惰)ので、私が将来私を助けるために答えを見つけたら私はこのスクリプトを作成しました。それが他人を助けることを願っています

vim fixperms.sh 

#!/bin/sh
for D in `find . -type d`
do
        echo $D;
        chown -R mysql:mysql $D;
        chmod -R 660 $D;
        chown mysql:mysql $D;
        chmod 700 $D;
done
echo Dont forget to restart mysql: /etc/init.d/mysqld restart;
2
dny238

http://forums.devshed.com/mysql-help-4/mysql-installation-problems-197509.html

Ib_ *ファイルの名前を変更するように言われます。私はそれをしました、そしてそれは私にdbを返しました。

2
James