.myd
、.myi
、.frm
ファイルから私のMySQLデータベースのひとつを復元するにはどうすればいいですか?
これらが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を持っています。]
MYIファイルを再構築したい場合は、REPAIR TABLEの正しい使い方は次のとおりです。
REPAIR TABLEの一部のUSE_FRM。
そうでなければ、おそらく別のエラーが発生するでしょう。
私はちょうどこれを解決するために発見しました。 Windows 7上でMySQL 5.1または5.6を使用しています。
この回復のために.MYIおよび.MYDファイルを見つける必要はありません。
注意すべき点が1つあります。
.FRMファイルにはテーブル構造が含まれており、MySQLバージョンに固有のものです。
.MYDファイルはバージョンに固有ではなく、少なくともマイナーバージョンではありません。
.MYIファイルは特定のものですが、他の回答が言うように省略してREPAIR TABLE
で再生成することができます。
この答えのポイントは、あなたがあなたのテーブルのスキーマダンプを持っているなら、あなたはそれを使ってテーブル構造を生成し、そしてあなたのバックアップでそれらの.MYDファイルを置き換え、MYIファイルを削除し、そしてそれらを修復できることを知らせることです。すべて。これにより、mysqldump
を使用せずに、バックアップを別のMySQLバージョンに復元したり、データベースをまとめて移動したりできます。大規模なデータベースを移動するときに、この超便利な方法がわかりました。
シンプル!ダミーデータベースを作成する(abcなど)
これらすべての.myd、.myi、.frmファイルをmysql\data\abcにコピーします。mysql\ data \は、すべてのデータベースの.myd、.myi、.frmが格納されている場所です。
それからphpMyadminに行き、db abcに行き、そしてあなたのデータベースを見つける。
私はあなたが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であり、そのディレクトリ内のすべての関連ファイルを保持している限り、データフォルダの適切な名前のサブディレクトリディレクトリにファイルをコピーできます。すべてのファイルが揃っていない場合は、問題があると確信しています。
.sql
ディレクトリにアクセスする必要なく、ファイルを.sql
ファイルに変換するソリューションを見つけました(その後、/var
ファイルをサーバーにインポートしてデータベースを回復できます)。したがって、これを行うにはサーバー管理者である必要はありません。どちらでも。
コンピュータにXAMPPまたはMAMPがインストールされている必要があります。
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を使用して別のサーバーにインポートできます。
上の記述は私のために物事を動かすのに十分ではなかった(おそらく密かにまたは怠惰)ので、私が将来私を助けるために答えを見つけたら私はこのスクリプトを作成しました。それが他人を助けることを願っています
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を返しました。