Tag Archives: myisamchk

MySQLのデータベースが派手に壊れた場合の修復覚書

ここではデータベースが派手に壊れた場合の話。ハードディスクが壊れたり、自分の場合はVMWAREで保存状態にしたまま、VirtualBoxで開いて操作したあとに、保存していたVMWAREで起動してしまったためハードディスクが派手に壊れてしまって普通のrepairでは直らなかった。

MySQLのデータにはMyISAM方式とINNODB方式があってここではMYISAMの場合、こっちのほうが修復が効きやすいらしい。

当然だがバックアップはとっておく。

どのように壊れたのかの記録

ユーザデータベースや特権データが壊れていると起動もできないので、以下で起動できるか確かめる。

このオプションはログインをスキップするので、特権データが壊れていても動くと思われる。

起動もしない場合

起動もしない場合は直接ファイルを触って直す。今回はMYISAM形式のファイルなので、myisamchkをつかう。MYISAMかどうかは、ファイルの拡張子がMYDやMYIならこの形式で、ibdの場合はINNODB。

以下の順番で試す。

これで直ればいいのだが、直らない場合はMYIを作り直す。MYDが実際のデータが入っているのでこのファイルがサイズが0だったり存在しない場合は復旧は無理だと思われる。

上記のmysqld –skip-grant-tablesでも起動できない場合は、すべてを初期化してから、MYDを復活するしかないが、ここではmysqldは動くものとする。

ここからmysqlでMYIを空にしてから、保存してあるMYDをもとに戻してから、復旧をすることになる。

テーブルを空にする

これで空の正常のMYIができてサイズ0のMYDができるので、保存してあるMYDを上書きコピーしてから上記のmyisanchkで復旧する。