私はPHPでの開発のプラットフォームとして、xamppを使用しています。
パソコン上でMYSQLを含むテストサーバーを構築でき、作業効率が良いためです。
ところが、先日xamppのMYSQLが起動しなくなる現象が発生しました。
開発環境のため、すぐに問題にはなりませんが、テストデータが全部使えなくなるのは少々面倒です。
そこで、なんとか復旧できないものかとググりやってみたところ、復旧ができました。
忘備録として記録いたします。
現象はこのような感じです。
MYSQL shutdown unexpectedly. 云々と表示され、MYSQLが一切動かなくなりました。
当然PHPの開発も止まってしまいます。
原因はMYSQLデータの破損
MYSQLには、MYSQL内に管理データが存在しています。
それが破損するとMYSQLが起動しなくなります。
ググってみるとxamppの場合、MYSQLを正しく終了させずにパソコンの電源をOFFにしたりすると、MYSQLの一部データが破損することがあるようです。
今回の場合は、推察ですがxampp動作中にパソコンをスリープ放置で現象が発生したようでした。
ワンチャン復旧できる可能性があります。
xamppでMYSQLが起動しなくなる現象は今まで度々起こっていました。
その都度、MYSQLを1から入れなおしていました。
今回、ググってみると復旧できる可能性があることがわかりました。
そこで早速試してみました。
テスト環境はバックアップも容易なので、こんな場合は躊躇せずに作業できます。
作業にあたっての注意!
- xamppは必ず停止した状態で作業しましょう。
- データ破損度合いによっては復旧できない場合もあります。
MYSQL復旧作業手順
現在のdataフォルダをリネームし、新しい空のdataを作成する
mysql\data フォルダにはMYSQLのデータが入っています。
リネームするのは、元データを消さないで残しておくためです。
新しく作成したdataフォルダに、新しいMYSQL環境を構築します。
backupフォルダの中身をdataフォルダへコピーします。
mysql\backupフォルダに、MYSQLの初期データが保存されています。
これ中身を空のdataフォルダにコピーすることで最低限の状態でMYSQLが起動できるようになります。
ただし、データはすべてない状態なので、ここからデータを復旧する作業をします。
もともとのMYSQLデータを新しいdataフォルダにコピーする
もともとのdataフォルダ(data_old)から復旧したいDBデータをコピーします。
その際に次のフォルダはコピーしてはいけません。
- mysqlフォルダ
- performance_schemaフォルダ
- phpmyadminフォルダ
- その他ファイル
古いdataフォルダからibdata1ファイルを新しいdataフォルダにコピーします
最後に、古いほうのdataフォルダ(data_old)からibdata1ファイルを新しいdataフォルダにコピーします。
これをやらないと、データが空っぽの状態で復旧されます。
データをコピーしてxamppでMYSQLが起動できれば復旧完了です
今回はこれでMYSQLが復旧しました。
phpmyadminで見てみると、データの中身も復旧できていました。
ちなみにユーザーアカウントは全部消えているので、設定しなおす必要があります。
この作業をすると、データは復旧できますが、ユーザーアカウントは全部消えます。
ユーザーアカウントを再設定する必要があります。
ただ、データが復旧できているならば、ユーザーアカウントの再設定ぐらいどうということはありません。
あきらめかけていたことが何とかなるのはうれしいものです。
いままで同様の現象が発生した場合は、あきらめてMYSQLを初期インストールしていました。
データはバックアップがあれば、インポートして復旧していました。
それはそれで何とかなるのですが、開発中のデータが消えたときはなんともやるせない感じになります。
今回、正しくデータをコピーしなおすだけで復旧できました。
最初は、どうせ失敗するだろうな・・と思っていましたが、ちゃんと復旧できたため、かなり助かりました。
なにごともまずやってみることは大事です。