2014/08/18

mysql crash

★MySQL のクラッシュの多くは、インデックスファイルやデータファイルの破壊が原因です
-flush を指定して mysqld を開始することによって、各 SQL コマンド実行後、強制的にすべてをディスクと同期させることができます。
 つまり、以下のことがなければ、通常は破壊されたテーブルを得ることはありません。

    誰かまたは何かが、更新中に mysqld またはマシンを強制終了した。

    更新中に mysqld が死ぬようなバグを見つけた。

    テーブルを適切にロックしないで、mysqld 外でデータまたはインデックスフファイルを操作している。

    優れたファイルシステムロック(通常、lockd デーモンによって処理される)をサポートしていないシステム上で、同じデータに対して、多くの mysqld サーバを実行しているか、--skip-external-locking で複数サーバを実行している。

    mysqld を混乱させるような不正なデータを含んだ、破損したインデックスまたはデータファイルがある。

    データストレージのコードにバグを発見した。これはおそらくあり得ないことだが、可能性としてはある。この場合、修正されたテーブルのコピーに対して ALTER TABLE を使用して、ファイルタイプを別のデータストレージエンジンに変更することができる。

★クラッシュの原因を見つけるのは非常に難しいので、まず、他で動作しているものが自分の環境でクラッシュするかどうかを確認してください。
mysqld --log を使用して、ログの情報から、特定のクエリがサーバを終了させるかどうかを判断する。バグの 95% が特定のクエリに関係している。