😱

MySQL がテーブル壊れてるらしいエラー吐いて死ぬかと思った話

2017/01/11に公開

確認

構成

基本的な 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