web-dev-qa-db-ja.com

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

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

client.frm
client.MYD
client.MYI

しかし、さらに約20のテーブルがあります。

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

121
Abdullah Jibaly

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

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

データベースフォルダーにコピーして復元できるはずです(Linuxでは、デフォルトの場所は/var/lib/mysql/です)

サーバーが実行されていないときに実行する必要があります。

121
Vincent

@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/

33
biolinh

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

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

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

  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サーバーにインポートします。

私は私の問題の解決策を見つけられなかったので、これらが役立つことを願っています。

7
Ivan Igniter

フォルダーを復元する場合は、ファイルをmysql:mysqlにchownすることを忘れないでください

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

それ以外の場合、データベースを削除したり、新しい列を追加したりするときにエラーが発生します。

mySQLを再起動します

service mysql restart
7
Joel Davey

MySql 5.1(Win7)を使用。 DB(InnoDbs)を再作成するために、次のディレクトリ(my.iniパラメーター)のすべてのコンテンツを置き換えました。

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

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

2

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

1
Filip Ekberg

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

0
SirJohnFranklin

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

0
Spikolynn