MySQL がテーブル壊れてるらしいエラー吐いて死ぬかと思った話
確認
構成
基本的な LAMP 環境に PHP フレームワークの CakePHP で構築されていたウェブシステム。
5年くらい前に作られたシステムらしく、自分はハードウェアもソフトウェアも構築に関与していなかったので手探りで調査。
症状
特定のページがエラーになるらしい。
CakePHP のエラーログ
Error: [PDOException] SQLSTATE[HY000]: General error: 126 Incorrect key file for table '/tmp/#sql_******'; try to repair it
Incorrect key file for table
?
検索
とりあえず怪しいキーワードを調べますよね。
そしたら以下の記事がヒットしたわけですよ。
15.2.4.1 MyISAM テーブルの破損
見た瞬間死んだな、って思いますよね。
破損を確認
CHECK TABLE
コマンドとやらで確認できるとのことで、エラーになっているページでアクセスしているテーブルをかたっぱしからチェックして見るものの、ステータスは OK
だった。
これはアウト?セーフ?
ステータス OK を追加して再度検索
mysqlでIncorrect key file for table
神よ!
ちょっと古い記事だけど、まさしく求めていた記事。
確かにさっきのエラーメッセージに /tmp
がなんたらって出てるものね。
さっそく /tmp を確認
df -h /tmp
Filesystem Size Used Avail Use% マウント位置
/dev/mapper/vg_***-lv_root
50G 49G 43M 100% /
/tmp
に空きがないとかいうレベルじゃない。
/
がパンパンだ。
しかも詳しく調べて見ると、 /var
とかもそこに入ってた。
もちろん /var/www
も /var/log
も /var/lib/mysql
も。
要はウェブシステム含めてサーバのシステムほぼ丸ごと 50GB で賄おうって設計らしい。
うーん。5年前はそれで良かったのだろうか…。
なお /home
は単独で切ってあって、大量に余ってた。
まさかこれ OS をデフォルト設定…?
ファイルを削除
とりあえず不要不急の古いファイルをいくらか削除したところ、エラーは解消した。
ただ、これは場当たり的な対応なので、近いうちに構成から見直さないとならないと思う。
Discussion