190

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

4

11 に答える 11

175

これらが 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 (インデックス) を再構築する必要があります。

唯一の制約は、ダウングレードする場合は、リリース ノートを確認する (そしておそらく修復テーブルを実行する) ことです。もちろん、新しい MySQL バージョンには機能が追加されています。

[明らかなはずですが、テーブルを組み合わせて使用​​すると、それらのテーブル間の関係の整合性が問題になります。MySQL は気にしませんが、アプリケーションとユーザーは気にするかもしれません。また、この方法は InnoDB テーブルではまったく機能しません。MyISAM のみですが、持っているファイルを考慮すると、MyISAM があります]

于 2009-05-18T19:07:12.257 に答える
27

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

REPAIR TABLE sometable USE_FRM;

そうしないと、おそらく別のエラーが発生するだけです。

于 2010-05-21T10:47:08.827 に答える
24

私はこれを解決することを発見しました。Windows 7 で MySQL 5.1 または 5.6 を使用しています。

  1. 「C:\Program Data\MySQL\MSQLServer5.1\Data」にある古いファイルから.frmファイルとibdata1をコピーします。
  2. 現在の SQL インスタンスで SQL サーバー インスタンスを停止します
  3. 「C:\Program Data\MySQL\MSQLServer5.1\Data」にあるデータ フォルダに移動します。
  4. ibdata1と、回復するファイルの .frm ファイルを含むデータベースのフォルダー貼り付けます。
  5. MySQL インスタンスを開始します。

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

于 2012-06-27T10:13:36.123 に答える
16

単純!ダミーデータベースを作成します(abcなど)

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

次に、phpMyadmin に移動し、db abc に移動すると、データベースが見つかります。

于 2011-05-25T16:24:10.350 に答える
14

注意すべき点:

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

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

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

この回答のポイントは、テーブルのスキーマ ダンプがある場合、それを使用してテーブル構造を生成し、それらの .MYD ファイルをバックアップに置き換え、MYI ファイルを削除して修復できることを知らせることです。全て。このようにして、バックアップを別の MySQL バージョンに復元したり、を使用せずにデータベースを完全に移動したりできますmysqldump。大規模なデータベースを移動するときに、これが非常に役立つことがわかりました。

于 2010-04-11T03:58:02.577 に答える
11

ディレクトリにアクセスする必要なく、ファイルをファイルに変換するソリューションを見つけました.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であったデータベースを含むファイルが作成されます(必要があります) 。次に、新しいデータベースを作成し、ナビゲーション バーの [インポート] を押して、手順に従ってインポートすることにより、phpMyAdmin を介して別のサーバーにインポートできます。.myd.myi.frm

于 2016-01-28T09:43:43.050 に答える
7

.myi は 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 |
+------------------+-------+----------+----------+
于 2009-11-08T15:50:17.480 に答える
5

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

于 2009-05-18T18:49:15.707 に答える
2

上記の説明は、私にとって物事を機能させるには十分ではありませんでした (おそらく密集または怠惰です)。そのため、将来役立つ答えが見つかったら、このスクリプトを作成しました。それが他の人に役立つことを願っています

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;
于 2015-01-27T03:51:28.697 に答える
2

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

ib_* ファイルの名前を変更するように指示されています。私はそれをやりました、そしてそれは私にdbを返しました。

于 2010-08-20T20:51:30.940 に答える
-2

Windows XP を使用し、MySQL サーバー 5.5 がインストールされている場合 - データベースの場所は C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.5\data です (MySql Workbench インストール内で場所を変更した場合を除く)。 GUI。

于 2012-05-31T11:57:17.903 に答える