
昨日から 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 としてダウンロードするだけですが、その際に問題が発生します。
- まず、mysqlを停止しました(XAMPPを使用してローカルで実行しています)
- 次に私はマイ.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"
- XAMPP の新しいバージョンでは、次のものを使い始めたいと思います。
- で/xampp/mysql/名前を変更しましたデータにデータ_古い
- その後、同じディレクトリに/xampp/mysql/私はコピーしましたデータ古い XAMPP のディレクトリ。
- それから私はMySQLサーバーを起動し、すべてが順調に進みました
これが誰かの役に立つことを願います!
答え3
これは私がWindows 10でMySQL 5.7を使ってやったことです
どちらのインストールも MySQL Installer を使用して行われたため、セットアップは同じで、他の回答で説明されているものとは少し異なります。
基本的に、元のインストール フォルダーからは、関心のあるスキーマにちなんで名付けられたフォルダーのみをコピーしました。次に、適用する基本的な設定は、フォルダー プロパティ ダイアログの [セキュリティ] タブにあります。
- メイン データ フォルダーとそのすべてのサブフォルダー (コピーしたものも含む) の所有権をアカウントに割り当てます
SYSTEM
(admin、administrator、またはコピーに使用されたユーザーではありません)。 NETWORK SERVICE
フォルダーに対する完全な制御権を持つユーザーに追加します。
これらの手順は MySQL フォーラムで見つかりました。元のメッセージは次のとおりです。
Ray Yates によるオリジナルの完全な説明:
後世のために:
C:\...\Data\フォルダを右クリックして「プロパティ」->「セキュリティ」->「詳細設定」を選択すると、NETWORK SERVICEという名前のプリンシパルが表示されました。
別のウィンドウで、コピー E:\MYSQL\Data\ フォルダを右クリックしましたが、そのような設定はないことがわかりました。
[追加]ボタンをクリックし、プリンシパルリンクを選択してオブジェクト名NETWORK SERVICEを入力し、[OK]をクリックします。
ネットワークサービスを選択し、[編集]をクリックしてフルコントロール[OK]をチェックしました
その後、元の手順をすべて繰り返したところ、サーバーは期待どおりに起動しました。