物理ファイルからのMySQLデータベースの復元


139

物理データベースファイルからMySQLデータベースを復元することは可能ですか?次のファイルタイプのディレクトリがあります。

client.frm
client.MYD
client.MYI

しかし、約20のテーブルが追加されます。

私は通常、mysqldumpまたは同様のツールを使用してすべてを1つのSQLファイルに取得するので、これらのタイプのファイルを処理する方法は何ですか?


同じ問題があります。拡張子がFRM、MYD、MYIの複数のファイルです。また、ib_logfile0、ib_logfile1、およびibdata1というファイルもあります。実行中のサーバーにアクセスできないか、ダンプを作成できません。新しいMySQLサーバーを実行してファイルを使用しようとしましたが、成功しませんでした...明確なハウツーを持っている人はいますか?
flo5783

回答:


132

MySQL MyISAMテーブルは、3つのファイルの組み合わせです。

  • FRMファイルはテーブル定義です。
  • MYDファイルは、実際のデータが格納される場所です。
  • MYIファイルは、テーブルに作成されたインデックスが格納される場所です。

それらをデータベースフォルダーにコピーすることで復元できるはずです(Linuxでは、デフォルトの場所はです/var/lib/mysql/)。

サーバーが稼働していないときに行う必要があります。


64
これはMyISAMテーブルにのみ当てはまります。InnoDBは、そのテーブルとインデックスを単一のテーブルスペース*に格納します。これは、デフォルトでは、3つのファイルibdata1、ib_logfile0、およびib_logfile1で構成されます。データベースを復元するには、これらのファイルも必要です。*テーブルごとのテーブルスペースは可能ですが、デフォルトではありません
ax。

21
彼は.frm .myiと.mydファイルを持っていると言います。次に、それはMyISAMテーブルであると想定しました。
ビンセント

5
貴重な答えですが、正常に機能するためにさらに一歩進んでいました。ファイルを復元するにはrootとしてログインするmysql必要があったため、mysqldプロセスを実行しているユーザーはファイルにアクセスできませんでした。やってchmod -R mysql:mysql .MySQLのデータディレクトリには、迅速かつ簡単ですが、考え出す、その前に、なぜすべての私resoterdのDBが何のテーブルは少し時間がかかっていない持っているように見えました。
Edurne Pascual 2012

10
herenvardoあなたがchmodではなくchownを意味していると思います
Oliver M Grech

2
重要事項のいくつかをおさらいするには、する必要がありますchown。そのようなコピーされたファイルsudo chown -R mysql:mysql /var/lib/mysql
Jacksonkr

50

@Vicentの答えから、私はすでにMySQLデータベースを以下のように復元しています:

ステップ1. Mysqlサーバーをシャットダウンする

ステップ2.データベースをデータベースフォルダーにコピーします(Linuxでは、デフォルトの場所は/ var / lib / mysqlです)。データベースの同じ名前、およびmysqlモードのデータベースの同じ名前を保持します。

sudo cp -rf   /mnt/ubuntu_426/var/lib/mysql/database1 /var/lib/mysql/

手順3:フォルダーを変更し、フォルダーのモードを変更します。

sudo chown -R mysql:mysql /var/lib/mysql/database1
sudo chmod -R 660 /var/lib/mysql/database1
sudo chown  mysql:mysql /var/lib/mysql/database1 
sudo chmod 700 /var/lib/mysql/database1

ステップ4:データベースフォルダーにibdata1をコピーする

sudo cp /mnt/ubuntu_426/var/lib/mysql/ibdata1 /var/lib/mysql/

sudo chown mysql:mysql /var/lib/mysql/ibdata1

ステップ5:ib_logfile0およびib_logfile1ファイルをデータベースフォルダーにコピーします。

sudo cp /mnt/ubuntu_426/var/lib/mysql/ib_logfile0 /var/lib/mysql/

sudo cp /mnt/ubuntu_426/var/lib/mysql/ib_logfile1 /var/lib/mysql/

自分自身を変更し、それらのファイルのルートを変更してください。

sudo chown -R mysql:mysql /var/lib/mysql/ib_logfile0

sudo chown -R mysql:mysql /var/lib/mysql/ib_logfile1

または

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

ステップ6(オプション):私のサイトにはファイルを特定の場所に保存するための設定があり、それらを対応する場所に正確にコピーします。

ステップ7:Mysqlサーバーを起動します。すべてが戻ってきて、楽しんでください。

それだ。

詳細については、https//biolinh.wordpress.com/2017/04/01/restoring-mysql-database-from-physical-files-debianubuntu/をご覧ください。


4
詳細な手順ごとの指示については+1。しかし、私はいくつかのステートメントを編集して、それらがどうあるべきかを真に反映しました。
ピーター

#1932エラーが発生し、データにアクセスできません。データベースは表示されますが、データにアクセスできません。MAC OS X MojaveでXAMPP 7.2.12を実行します。
Steve1754a

@ Steve1754aエラーにはさまざまな理由が考えられます。1.データベースをMac OSからMac OSに移動しますか?2.それらのファイル/データ/テーブルの許可を確認してください
biolinh

回答:1.はい。2.しました。私は自分のDBを完全に再構築する必要がありました。解決策を理解できませんでした。話のモラル:常にDBのバックアップを作成します。XAMPPで自動的にそれを行う簡単な方法があったらいいのにと思います。
Steve1754a

1
あなたは私の命を救った
スポンジパブロ

8

フォルダーを復元する場合は、ファイルをmysql:mysqlに変更

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

することを忘れないでください。そうしないと、データベースを削除したり、新しい列を追加したりするときにエラーが発生します。

MySQLを再起動します

service mysql restart

2
これは質問に対する答えではありませんが、非常に役に立ちました。
ryantuck

実際にはすべてをmysqlに移行するべきではありません。mysqlデータベースフォルダーはルートグループを保持する必要があります
Galvani

8

同じ問題がありますが、上記の指示に基づいてデータベースを正常に回復できませんでした。

mysqlデータベースフォルダーはUbuntu OSからしか回復できませんでした。私の問題は、これらの読み取り不可能なmysqlデータフォルダーでデータベースを回復する方法です。そこで、開発環境をwin7 OSに戻しました。

*注意:win7で実行されている既存のデータベースサーバーがあり、回復したファイルから取得するデータベースファイルはほとんど必要ありません。Ubuntu OSからデータベースファイルを正常に回復するには、mysqlデータベースサーバー(Win7 OSのUbuntu OSと同じバージョン)を新たにインストールして、古いデータベースサーバーのすべてを回復する必要があります。

  1. リカバリされたファイルから、別の新しいmysqlデータベースサーバーを同じバージョンにします。

  2. mysqlサーバーを停止します。

  3. リカバリされたフォルダをコピーし、(C:\ ProgramData \ MySQL \ MySQL Server 5.5 \ data)に貼り付けます。mysqlデータベースが保存されています。

  4. linux mysqlのインストールフォルダーにあるibdata1ファイルをコピーして、(C:\ ProgramData \ MySQL \ MySQL Server 5.5 \ data)に貼り付けます。置き換える前に、既存のものを上書きするか、バックアップを作成してください。

  5. mysqlサーバーを起動し、データベースファイルが正常に回復したかどうかを確認します。

  6. 現在使用しているmysqlサーバーで復元したデータベースを使用するには、復元したデータベースをエクスポートして、既存のmysqlサーバーにインポートするだけです。

他の何も私のために働いていなかったので、これらが役に立てば幸い


1
このメソッドは、ibdata1、ib_logfile0、およびib_logfile1ファイルとデータベースフォルダーを含むubuntu / debianでも機能します。ユーザーはコピーされませんが、データベースに新しいユーザーを追加し、それをダンプすることができます。
bokorben

2

MySql 5.1(Win7)。DB(InnoDbs)を再作成するために、以下のディレクトリ(my.ini params)のすべてのコンテンツを置き換えました。

datadir="C:/ProgramData/MySQL/MySQL Server 5.1/Data/"
innodb_data_home_dir="C:/MySQL Datafiles/"

その後、MySqlサービスを開始し、すべて正常に動作しました。


1

はい、そうです!それらを(OSに応じて)データベースフォルダーに追加し、「MySQL Fix Permissions」などのコマンドを実行します。これにより、データベースが復元されました。ファイルに正しい権限が設定されていることも確認してください。


やりましたが、テーブルが認識されません。以前の答えのコメントで言ったように。
オレズヴァニ2013

0

これらのファイルを、稼働中のmysqlデータベースのデータベースストレージフォルダーにコピーし、dbを起動して、ファイルが「修復」されるのを待ってから、mysqldumpで抽出しました。


-1

私の場合、/ var / lib / mysqlのtc.logを削除するだけで、mariadb / mysqlを再起動できました。


これは、mysqlサーバーを起動/再起動できるという問題ではありません。
Oluwatumbi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.