昨日からmysqlを実行できず、mysqlにアクセスできないため、再インストールすることにしました。 mysqlを再インストールした後、データベースを復元するために必要なすべてが含まれていると思われるデータフォルダーをバックアップしました。
貼り付けてコピーし、古いデータフォルダーをバックアップで上書きしましたが、mysqlのロードを妨げるエラーが発生します。
私のデータベースと同じ名前のフォルダーのみをコピーして貼り付けました(mydatabaseとしましょう)。これは問題なく動作しますが、データベース自体をロードできませんでした。 SQLyogでデータベースにアクセスしようとすると、すべてのテーブルで「Ca n't open file tablename.ibd "がスローされます。
データベースを適切に復元するにはどうすればよいですか?
MySQL 4.1とWindows 7を使用しています。
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.cnf
(C:\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ダンプを実行し、本番サーバーに復元しました。
投票して、素晴らしい回答をしてくれた Pimp Juice IT に感謝します。私は彼の回答の助けを借りて同様の問題を解決しましたが、少し異なるので、共有したいと思いました。
XAMPPの最新バージョンに更新しました。インストーラーを使用せず、新しいZipとしてダウンロードするだけで、その際に問題が発生します。
#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"
これが誰かを助けることを願っています!