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


183

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


10
私はこれに答えましたが、それは本当にServerfaultに属しています。
derobert 2009年

31
@chandrajeetあなたは本当に最も投票された答えを受け入れるべきです。
タワー

2
ちょっとチャンドラジート、デロバートの答えを受け入れてみませんか?私もそれがうまくいくことを確認します。それはあなたのためではないですか?stackoverflow.com/help/someone-answers
Taz

回答:


173

これらが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を持っています]


これは、適切なエントリをinformation_schemaテーブルに追加せずに本当に機能しますか?MySQLはこれらのファイルを正しく探すために知る必要があるということですか?
Zenshai

4
information_schemaテーブルは実際には存在せず、内部データベースの状態のビューにすぎません。dev.mysql.com/doc/refman/5.0/en/information-schema.htmlを
brian-

4
うわー、汚れた感じがしましたが、MySQL4のインストールと思われるディレクトリ全体をMySQL5.1にドロップすると、魔法のようにテーブルが再作成されました。再起動などはありません(Windowsの場合)。
デイブ

4
それはあなたが実行することを覚えておく必要があるだけで動作します(すべてのテーブルに対して): check table sometable; 次に修復を実行します(必要な場合のみ): repair table sometable;
Nux

3
これはうまくいきました!ファイルを配置しましたが、所有権を「mysql:mysql」に変更するまで、mysqlはそれらを「認識」していませんでした。
sean.boyer 2014年

26

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

REPAIR TABLE sometable USE_FRM;

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


24

私はこれの解決策を見つけました。MySQL 5.1または5.6をWindows 7で使用しています。

  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ファイルを見つける必要はありません。


これらの手順に従い(他のすべてが失敗した後)、innodb_force_recovery = 4レベルを使用しました(この場合、それが必要かどうかはわかりません)よかった!
Joshua Stewardson

6
参考:ibdata1InnoDBであり、MyISAMではありません。
derobert、2015

14

注意すべきこと:

.FRMファイルにはテーブル構造があり、MySQLバージョンに固有です。

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

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

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


14

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

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

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


最短かつ正確な答え
Serak Shiferaw 2017年

データを回復する最良の方法...私はWAMPをインストールしてから新しいデータベースを作成し、新しいデータベースディレクトリにファイルをコピーしますC:\ WAMP64 \ bin \ mysql \ mysqlxx \ data \ newdatabase phpmyadminを開いて新しいデータベースをデータを見る
アレクサンドルジョージ

7

mysql内から修復できる.myiだと思います。

MySQLから次のタイプのエラーメッセージが表示される場合:データベースはクエリ(クエリ)の実行に失敗しました1016:ファイルを開けません: 'sometable.MYI'。(errno: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 |
+------------------+-------+----------+----------+

6

ディレクトリにアクセスする必要なく、ファイルをファイルに変換するソリューション.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を介して別のサーバーにインポートし、インポートする手順に従います。


5

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


まったく同じバージョンのMySQLがない場合、どうすればよいですか?
Jo Sprague


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;

-2

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


3
問題は、特定のファイルタイプからのリカバリに関するものであり、それらのファイルがWindows XP MySQL 5.5で見つかる場所ではありません。
Danpe、2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.