web-dev-qa-db-ja.com

データフォルダーのファイルを使用してMySQLデータベースを復元する方法

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

貼り付けてコピーし、古いデータフォルダーをバックアップで上書きしましたが、mysqlのロードを妨げるエラーが発生します。

私のデータベースと同じ名前のフォルダーのみをコピーして貼り付けました(mydatabaseとしましょう)。これは問題なく動作しますが、データベース自体をロードできませんでした。 SQLyogでデータベースにアクセスしようとすると、すべてのテーブルで「Ca n't open file tablename.ibd "がスローされます。

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

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

6
Vylix

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のコントロールパネルを使用してMySQLサービスを停止しました。

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

次に、my.cnfC:\Program Files\xampp\mysql\binにあります)を編集し、次の変更を加えました(66行目から)。

OLD:

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

NEW:

#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サービス(C:\Program Files\xampp\mysql_start.bat)を開始するXAMPPバッチファイルを編集しました。 mysqldの呼び出しの最後に–innodb_force_recovery=6を追加しました。したがって、そのファイルの8行目が読み取られます。

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

これでうまくいきました!私のデータベースは私のマシンで回復されました。私は SQLyog を使用して、データベースのSQLダンプを実行し、本番サーバーに復元しました。

ソース


その他のリソース

4
Pimp Juice IT

投票して、素晴らしい回答をしてくれた Pimp Juice IT に感謝します。私は彼の回答の助けを借りて同様の問題を解決しましたが、少し異なるので、共有したいと思いました。

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

  1. 最初にmysqlを停止しました(XAMPPを使用してローカルで実行しています)
  2. 次に、/(/// =)/ xampp/mysql/bin /ファイルにあるmy.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 /で、datadata_oldに名前変更
    • 次に、まだ同じディレクトリ/ xampp/mysql /にありますdataディレクトリを古いXAMPPからコピーしました。
  2. 次に、MySQLサーバーを起動し、すべてが完了しました

これが誰かを助けることを願っています!

0
Rockin4Life33