.myd
、.myi
、.frm
ファイルから MySQL データベースの 1 つを復元するにはどうすればよいですか?
11 に答える
これらが 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 があります]
MYI ファイルを再構築する場合、REPAIR TABLE の正しい使い方は次のとおりです。
REPAIR TABLE sometable USE_FRM;
そうしないと、おそらく別のエラーが発生するだけです。
私はこれを解決することを発見しました。Windows 7 で MySQL 5.1 または 5.6 を使用しています。
- 「C:\Program Data\MySQL\MSQLServer5.1\Data」にある古いファイルから.frmファイルとibdata1をコピーします。
- 現在の SQL インスタンスで SQL サーバー インスタンスを停止します
- 「C:\Program Data\MySQL\MSQLServer5.1\Data」にあるデータ フォルダに移動します。
- ibdata1と、回復するファイルの .frm ファイルを含むデータベースのフォルダーを貼り付けます。
- MySQL インスタンスを開始します。
このリカバリのために .MYI および .MYD ファイルを見つける必要はありません。
単純!ダミーデータベースを作成します(abcなど)
これらすべての .myd、.myi、.frm ファイルを mysql\data\abc にコピーします。ここで、mysql\data\ は、すべてのデータベースの .myd、.myi、.frm が保存される場所です。
次に、phpMyadmin に移動し、db abc に移動すると、データベースが見つかります。
注意すべき点:
.FRM ファイルにはテーブル構造が含まれており、MySQL のバージョンに固有です。
.MYD ファイルは、少なくともマイナー バージョンではなく、バージョンに固有のものではありません。
.MYI ファイルは特定のものですがREPAIR TABLE
、他の回答のように省略して再生成することができます。
この回答のポイントは、テーブルのスキーマ ダンプがある場合、それを使用してテーブル構造を生成し、それらの .MYD ファイルをバックアップに置き換え、MYI ファイルを削除して修復できることを知らせることです。全て。このようにして、バックアップを別の MySQL バージョンに復元したり、を使用せずにデータベースを完全に移動したりできますmysqldump
。大規模なデータベースを移動するときに、これが非常に役立つことがわかりました。
ディレクトリにアクセスする必要なく、ファイルをファイルに変換するソリューションを見つけました.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
.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 |
+------------------+-------+----------+----------+
ファイルは、データ フォルダの適切な名前のサブディレクトリ ディレクトリにコピーできますが、これは、完全に同じバージョンの mySQL であり、そのディレクトリ内のすべての関連ファイルを保持している場合に限ります。すべてのファイルがない場合は、問題が発生することは間違いありません。
上記の説明は、私にとって物事を機能させるには十分ではありませんでした (おそらく密集または怠惰です)。そのため、将来役立つ答えが見つかったら、このスクリプトを作成しました。それが他の人に役立つことを願っています
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;
http://forums.devshed.com/mysql-help-4/mysql-installation-problems-197509.html
ib_* ファイルの名前を変更するように指示されています。私はそれをやりました、そしてそれは私にdbを返しました。
Windows XP を使用し、MySQL サーバー 5.5 がインストールされている場合 - データベースの場所は C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.5\data です (MySql Workbench インストール内で場所を変更した場合を除く)。 GUI。