web-dev-qa-db-ja.com

.frmファイルからmysqlデータベースを復元する

バックアップを取得するために毎週すべてのテーブルをダンプしました。しかし、後で、テーブルの.frmファイルのみを保存していることを理解しています。テーブルの.MYDおよび.MYIファイルは表示されません。そのため、データベースの.frmファイルのみを持ち、mydatabaseもinnodbです。データベースのデータを使用してデータベースを取得できますか?

39
user359187

はい、これは可能です。 .frmファイルをデータベースフォルダーにコピーするだけでは十分ではありませんが、ib_logfilesおよびibdataファイルをデータフォルダーにコピーする必要もあります。 .frmファイルをコピーしてそれらのファイルをコピーし、サーバーを再起動するだけでデータベースが復元されます。

上記のファイルをコピーした後、次のコマンドを実行します-

Sudo chown -R mysql:mysql/var/lib/mysql

上記のコマンドは、mysqlおよびそのフォルダーのファイル所有者をMySqlユーザーに変更します。 mysqlが.frmおよびibdataファイルを読み取ることは重要です。

74
user359187

誰かに役立つかもしれません:

災害後にのみfrmファイルを回復できました。少なくとも、次の操作を行うことでFRMファイルからテーブル構造を取得できました。

1-新しいmysqlデータベースに少なくとも1つの列とfrmファイルを持つ同じ名前のダミーテーブルを作成します。

2ストップmysqlサービス

3-古いfrmファイルをコピーして、新しく作成されたテーブルのfrmファイルに貼り付けます。上書きするかどうかを尋ねる必要があります。すべてを交換してください。

4-mysqlサービスを開始すると、テーブル構造ができました...

よろしく。なんとなく

18
anybudy

.frmファイルからテーブル作成SQLコードを生成する優れたツールであるmysqlfrmを使用しました。テーブルがリストされていても、この厄介なテーブルが見つかりませんというエラーが表示されました。したがって、このツールを使用してテーブルを再生成しました。 Ubuntuでは、これを次のようにインストールする必要があります。

Sudo apt install mysql-utilities

その後、

mysqlfrm --diagnostic mysql/db_name/ > db_name.sql

新しいデータベースを作成すると、使用できます。

mysql -u username -p < db_name.sql

ただし、これはテーブルを提供しますが、データは提供しません。私の場合、これで十分でした。

7
Chandan Purohit

私もこの質問に答えました: https://dba.stackexchange.com/a/42932/24122

私は最近この同じ問題を経験しました。私はMacを使用しているため、MAMPを使用してデータベースを復元し、MySQLダンプにエクスポートできるようにしました。

あなたはそれについての完全なブログ投稿をここで読むことができます: http://www.quora.com/Jordan-Ryan/Web-Dev/How-to-Recover-innoDB-MySQL-files-using-MAMP-on -a-Mac

絶対必要です:

-ibdata1

-ib_logfile0

-ib_logfile1

-mysql_databaseフォルダーの.FRMファイル

-破壊しても構わないMAMP/MAMP Proの新規インストール(必要な場合)

  1. Webサーバー(開発、本番、違いなし)にSSHで接続し、mysqlフォルダーを参照します(Linux上のPleskインストールの場合は/ var/lib/mysqlにあります)
  2. Mysqlフォルダーを圧縮する
  3. MyISAMまたはinnoDBにかかわらず、すべてのmySQLデータベースを含むmysqlフォルダーのアーカイブをダウンロードします(必要に応じて、このファイルをscpするか、ダウンロード可能なディレクトリに移動できます)
  4. MAMPのインストール(Mac、Apache、MySQL、PHP)
  5. / Applications/MAMP/db/mysql /を参照します
  6. / Applications/MAMP/db/mysqlをZipアーカイブにバックアップします(念のため)
  7. Mysqlフォルダーのアーカイブに含まれるすべてのフォルダーとファイルを運用サーバーからコピーします(私の場合はmt Plesk環境)。ただし、上書きしないでください。

    -/ Applications/MAMP/db/mysql/mysql /

    -/ Applications/MAMP/db/mysql/mysql_upgrade_info

    -/ Applications/MAMP/db/mysql/performance_schema

  8. これで、phpMyAdminからデータベースにアクセスできるようになったはずです。

しかし、まだ完了していません。これらのファイルを実稼働環境に復元するためにmysqldumpを実行する必要があり、phpmyadminインターフェイスは大規模なデータベースでタイムアウトします。こちらの手順に従ってください:

http://nickhardeman.com/308/export-import-large-database-using-mamp-with-terminal/

参考のために以下にコピーしました。デフォルトのMAMPインストールでは、パスワードは「root」であることに注意してください。

ターミナルを使用してMAMPのmysqldumpを実行する方法

MAMPからのデータベースのエクスポート[1]

ステップ1:新しいターミナルウィンドウを開く

ステップ2:端末cd/applications/MAMP/library/binに次の行を入力してMAMPインストールに移動しますEnterキーを押します

ステップ3:ダンプコマンドを書く./mysqldump -u [USERNAME] -p [DATA_BASENAME]> [PATH_TO_FILE] Enterキーを押す

例:

./mysqldump -u root -p wp_database > /Applications/MAMP/htdocs/symposium10_wp/wp_db_onezero.sql

クイックヒント:フォルダーにすばやく移動するには、フォルダーをターミナルウィンドウにドラッグすると、フォルダーの場所が書き込まれます。誰かがこれを見せてくれたのは素晴らしい日でした。

ステップ4:Enterを押すと、このテキスト行が表示されますEnter password:だから、推測して、パスワードを入力します。表示されますが、そこにありますEnterキーを押します

ステップ5:ファイルを保存した場所を確認します。ファイルが存在する場合は、SUCCESSこれで、次に概要を説明するデータベースをインポートできます。

Mysqlデータベースのエクスポートができたので、実稼働環境にインポートできます。

7
jordan8037310

データベースフォルダーをMySQLのデータフォルダーにコピーします。つまり、altoというデータベースがある場合は、MySQLでaltoフォルダーを見つけ、バックアップでデータフォルダーを探し、altoフォルダー全体をコピーして、新しくインストールしたMySQLに貼り付けます。 >データフォルダー、MySQLを再起動し、これは完璧に動作します。

3
Muddassar Ahmad

すべてのファイルをコピーして/ var/lib/mysqlに置き換えます。その後、ファイルの所有者をmysqlに変更する必要がありますmariadb.serviceの再起動が失敗した場合、これは非常に重要です

chown -R mysql:mysql/var/lib/mysql/*

そして

chmod -R 700/var/lib/mysql/*

2

開始する前に、WAMPサービスを停止するか、少なくともサービスの開始を求められたらサービスを再起動する必要があります。

古いサーバーインスタンスでは、デフォルトでMySQLデータフォルダーに移動します。これは、C:\wamp\bin\mysql\mysql5.1.53\data\ どこ mysql5.1.53は、以前にインストールされたMySQLデータベースのバージョン番号です。

このフォルダー内に、いくつかのファイルとフォルダーが表示されます。フォルダーは実際のMySQLデータベースであり、必要な.frmファイルの束が含まれています。フォルダ名をデータベース名として認識する必要があります。これらのフォルダーとそのすべてのコンテンツは、MySQLデータフォルダーに直接コピーできます。デフォルトのデータベースmysql、performance_schema、testは無視できます。

サーバーを起動した場合、データベースが選択されていることがわかりますが、データベースにはコピーされたテーブルは含まれていません。データベースの内容を取得するには、データフォルダーに戻ってファイルibdata1、これはテーブルのデータファイルです。これをデータフォルダーに直接コピーします。新しいデータフォルダーに「ibdata1」というファイルが既にあるはずなので、この名前をibdata1.bakは、ibdata1古いMySQLデータフォルダーから。

これが完了したら、すべてのWAMPサービスを再起動します。 PhpMyAdminを使用して、データベースが正常に復元されたかどうかを確認できます。

0
Azam Alvi

同じ名前で新しいデータベースを作成します。frm .ibdファイルをxampp/mysql/data/[databasename] /にコピーします

内部にあるibdataファイルも必要になります

xampp/mysql/data /以前のibdata1ファイルをコピーしてファイルに貼り付け、既存のibdataファイルに置き換えます

[注意:新しいibdataファイルに新しく作成されたデータベースの内容を失う可能性があります]

0
swanand keskar

はい!可能です

長いアプローチですが、_.frm_ファイルだけを使用してすべてのデータを取得できます。もちろん、_mysql/data_ディレクトリに他のファイルが必要です。

私の問題

ある日、ハードディスクがクラッシュし、起動中のブルースクリーンエラーが発生しました。複数のマシンで接続しようとしましたが、うまくいきませんでした。起動エラーなので、ファイルについて心配していました。そして、セカンダリハードディスクを試し、フォルダとファイルを復元しようとしました。また、念のため、完全なxamppフォルダー_c:/xampp_もバックアップしました。最近のデータベースのバックアップがなかったため、データベースの取得方法が本当に心配でした。データベースには多くのクライアントプロジェクト管理と個人ドキュメントがあります。

Stackoverflowコメントにリストされている方法はどれも、私にとっては少なくとも機能しません。 _.frm_ファイルからデータを取得するための答えを得るために丸2日かかった。多くの人々からの複数のアプローチに出くわしましたが、すべてがフラストレーションであり、実装時に何らかのエラーが発生しました。彼らのほとんどが(彼らのコメントに基づいて)それを機能させるなら、私は何が欠けていますか。

私はとても必死だったので、私はすべてのソフトウェアを失い、再試行するウィンドウを再インストールすることさえした。それでも同じエラー

ダスティン・デイビスに感謝

彼のブログで解決策を見つけ、彼とまったく同じように機能させることができました。この男、Dustin Davisに感謝します( https://dustindavis.me/restoring-mysql-innodb-files-on-windows/ )。ここから彼のブログにジャンプして、彼の方法を試すことができます。

しかし、彼のブログで説明していないアプローチを試したときに発見したことがあります。私がどのようにしたか、あなたが探す必要があるものを説明するために最善を尽くします。

これに正確に従ってください

重要:必ず同じバージョンのXAMPPをインストールしてください。古いXAMPPから新しいバージョンに貼り付けをコピーすることはできません。これにより、___config_または___tracking_エラーが発生します。

XAMPPバージョンを確認する方法

  1. Xamppフォルダ(バックアップされたxampp)に移動します。
  2. _readme_en.txt_ファイルを開きます。これはxamppのルートディレクトリにあります。
  3. 上にバージョンが表示されます。 _###### ApacheFriends XAMPP Version X.X.XX ######_

ファイルを復元する必要があります

xampp(old folder)/mysql/data/

_ibdata1
ib_logfile0
ib_logfile1
<databasename>/*.frm
<databasename>/*.ibd
_

ステップ1

  1. 同じバージョンのxamppをインストールした後。
  2. Apacheまたはmyqlを起動しないでください

ステップ2

  • _mysql/data_フォルダーに移動し、replace_ibdata1_、_ib_logfile0_、および_ib_logfile1_
  • databaseフォルダーを古いxamppバックアップから、_c:/xampp/mysql/data/_および_.frm_ファイルを含む新しくインストールされたxamppフォルダー_.ibd_にコピーペーストします。データベース。

ステップ3

  • _c:/xampp/mysql/bin_に移動し、_my.cn_を探します。
  • _my.cn_ファイルを開いて_#skip-innodb_を探し、その下で_innodb_log_file_size=5M_という行を探して_170M_に変更します。 _innodb_log_file_size=170M_。これはログファイルのサイズであり、不明な場合は_170_に設定するだけです

ステップ4

  • ここで、_mysql_start.bat_ディレクトリにあるファイル_c:/xampp/_(Windowsバッチファイル)を開きます。
  • _–innodb_force_recovery=6_の後に_... --console_を追加します

    _....
    
    mysql\bin\mysqld --defaults-file=mysql\bin\my.ini --standalone --console
    –innodb_force_recovery=6
    if errorlevel 1 goto error
    goto finish
    _

ステップ5

  • 次に、ApacheとMysqlを起動します。
  • phpmyadminに移動して、データベースとそのテーブルを確認します。エラーが発生しない場合、正しい軌道に乗っています。
  • ApacheとMysqlを停止し、残りのデータベースをコピーして貼り付けます。
0
TheHive