データ フォルダー上のファイルを使用して MySQL データベースを復元するにはどうすればよいですか?

データ フォルダー上のファイルを使用して MySQL データベースを復元するにはどうすればよいですか?

昨日から MySQL を実行できず、アクセスもできないため、再インストールすることにしました。データ フォルダをバックアップしました。このフォルダには、MySQL を再インストールした後にデータベースを復元するために必要なものがすべて含まれていると思います。

バックアップをコピーして貼り付け、古いデータ フォルダーを上書きしましたが、エラーが発生し、mysql が読み込まれなくなります。

私はデータベースと同じ名前のフォルダだけをコピーして貼り付けました(例えばマイデータベース)で、問題なく動作しますが、データベース自体はロードできませんでした。SQLyogでデータベースにアクセスしようとすると、すべてのテーブルで「ファイルを開けません」というエラーが発生します。テーブル名.ibd

データベースを適切に復元するにはどうすればよいですか?

MySQL 4.1 と Windows 7 を使用しています。

答え1

Windows での MySQL InnoDB ファイルの復元

InnoDB タイプのファイルはより困難な作業でした。そのため、この記事を書いています。その方法を見つけるのに苦労しましたが、タスクを完了するのに十分な情報をまとめることができました。ここで、恩返しとして、復元するために私が行ったことを正確に説明します。

バックアップには次のファイルがありました:

\MySQL\MySQL Server 4.1\data\ibdata1
\MySQL\MySQL Server 4.1\data\ib_logfile0
\MySQL\MySQL Server 4.1\data\ib_logfile1

さらに、データ フォルダーには、復元していたデータベースと同じ名前のフォルダーがあり、その中に*.frmファイル ( table_name.frm) が含まれていました。

サーバー上で動作しているものを台無しにしたくなかったので、実際のサーバーではなく開発マシンで復元を行いました。MySQL は XAMPP インストールからすでにインストールされていました。(開発ボックスは Windows XP SP2 を実行しています)。XAMPP は MySQL を通常の MySQL インストールとは少し異なる方法でインストールするため、ここで行った操作に従うと役立つ場合は、XAMPP をインストールすることをお勧めします。

まず、XAMPP のコントロール パネルを使用して MySQL サービスを停止しました。

上記のファイル (ib*ファイルとファイルを含むフォルダ*.frm) をローカルの mysql データ フォルダ ( C:\Program Files\xampp\mysql\data) に移動しました。

次に、my.cnf( にあるC:\Program Files\xampp\mysql\bin) を編集し、次の変更を加えました (私の場合は 66 行目から開始)。

古い:

skip-innodb
#innodb_data_home_dir = C:/Program Files/xampp/mysql/data/
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = C:/Program Files/xampp/mysql/data/
#innodb_log_arch_dir = C:/Program Files/xampp/mysql/data/
#set-variable = innodb_buffer_pool_size=16M
#set-variable = innodb_additional_mem_pool_size=2M
#set-variable = innodb_log_file_size=5M
#set-variable = innodb_log_buffer_size=8M
#innodb_flush_log_at_trx_commit=1
#set-variable = innodb_lock_wait_timeout=5

新しい:

#skip-innodb
innodb_data_home_dir = C:/Program Files/xampp/mysql/data/
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = C:/Program Files/xampp/mysql/data/
innodb_log_arch_dir = C:/Program Files/xampp/mysql/data/
set-variable = innodb_buffer_pool_size=16M
set-variable = innodb_additional_mem_pool_size=2M
set-variable = innodb_log_file_size=170M
set-variable = innodb_log_buffer_size=8M
innodb_flush_log_at_trx_commit=1
set-variable = innodb_lock_wait_timeout=50

(innodb_log_file_size をログ ファイルの実際のサイズに設定する必要がありました)

次に、mysql サービスを開始する XAMPP バッチ ファイル ( ) を編集しました。mysqldへの呼び出しの末尾にC:\Program Files\xampp\mysql_start.bat追加しました 。そのため、そのファイルの 8 行目は次のようになります。–innodb_force_recovery=6

mysql\bin\mysqld –defaults-file=mysql\bin\my.cnf –standalone –console –innodb_force_recovery=6

これでうまくいきました!私のマシンでデータベースが回復しました。 SQLヨグデータベースの SQL ダンプを実行して、運用サーバーに復元します。

ソース


その他のリソース

答え2

投票して感謝しますピンプジュースIT素晴らしい回答をありがとうございます。私も彼の回答を参考にして似たような問題を解決しましたが、やり方が少し違ったの​​で、共有しようと思いました。

XAMPP の最新バージョンにアップデートしました。インストーラーは使用せず、新しい zip としてダウンロードするだけですが、その際に問題が発生します。

  1. まず、mysqlを停止しました(XAMPPを使用してローカルで実行しています)
  2. 次に私はマイ.iniファイルの保存場所ディレクトリファイル -- 私の場合、変更は#skip-innoodb(行 136) から始まりました。行番号は異なる場合があります。

私が最初に見つけたものは次のとおりです:

#... omitted lines above ...
#skip-innodb
innodb_data_home_dir = "/xampp/mysql/data"
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = "/xampp/mysql/data"
#innodb_log_arch_dir = "/xampp/mysql/data"
#... omitted lines below ...

ここでの問題は相対パスのようです。C:上記のディレクトリが欠落していることに注意してください。パスを絶対パスにすることが私の最初のステップでした。

#skip-innodb
innodb_data_home_dir = "C:/xampp/mysql/data"
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = "C:/xampp/mysql/data"
#innodb_log_arch_dir = "C:/xampp/mysql/data"
  1. XAMPP の新しいバージョンでは、次のものを使い始めたいと思います。
    • /xampp/mysql/名前を変更しましたデータデータ_古い
    • その後、同じディレクトリに/xampp/mysql/私はコピーしましたデータ古い XAMPP のディレクトリ。
  2. それから私はMySQLサーバーを起動し、すべてが順調に進みました

これが誰かの役に立つことを願います!

答え3

これは私がWindows 10でMySQL 5.7を使ってやったことです

どちらのインストールも MySQL Installer を使用して行われたため、セットアップは同じで、他の回答で説明されているものとは少し異なります。

基本的に、元のインストール フォルダーからは、関心のあるスキーマにちなんで名付けられたフォルダーのみをコピーしました。次に、適用する基本的な設定は、フォルダー プロパティ ダイアログの [セキュリティ] タブにあります。

  • メイン データ フォルダーとそのすべてのサブフォルダー (コピーしたものも含む) の所有権をアカウントに割り当てますSYSTEM(admin、administrator、またはコピーに使用されたユーザーではありません)。
  • NETWORK SERVICEフォルダーに対する完全な制御権を持つユーザーに追加します。

これらの手順は MySQL フォーラムで見つかりました。元のメッセージは次のとおりです。

Ray Yates によるオリジナルの完全な説明:

後世のために:

  1. C:\...\Data\フォルダを右クリックして「プロパティ」->「セキュリティ」->「詳細設定」を選択すると、NETWORK SERVICEという名前のプリンシパルが表示されました。

  2. 別のウィンドウで、コピー E:\MYSQL\Data\ フォルダを右クリックしましたが、そのような設定はないことがわかりました。

  3. [追加]ボタンをクリックし、プリンシパルリンクを選択してオブジェクト名NETWORK SERVICEを入力し、[OK]をクリックします。

  4. ネットワークサービスを選択し、[編集]をクリックしてフルコントロール[OK]をチェックしました

  5. その後、元の手順をすべて繰り返したところ、サーバーは期待どおりに起動しました。

関連情報