MySQLでテンパって終息しました。その一部始終。

MySQLでテンパって終息しました。その一部始終をレポートします。(ちなみにMy三国志の話です。)


その1.sessionsからレコードを削除
サイト開設して半年程経つんですがその間のsessionを放置してました。Sledegeで出来てるサイトなのでSledge::Session::MySQLにてsessionsというテーブルにセッション情報を保持しています。

そして

DELETE FROM sessions WHERE timestamp < SUBDATE(NOW(), INTERVAL 61 DAY);

として1ヶ月前以前のデータを削除してみました。

待つ事およそ15分くらい(多分50万件くらい)たって無事終了。


その2.怪しげなメッセージが!!
mysqlがswap食いまくってたのでmysqlを再起動し再度ログインしたところ怪しげなメッセージが。。

Didn't find any fields in table 'sessions'

未だかつて遭遇した事のないメッセージに若干発汗しましたが、解決策を探らなくてはと取り合えず叩いてみると。。

mysql> select * from sessions;
ERROR 1016: Can't open file: 'sessions.MYI'. (errno: 145)

MYIが開けない?存在を確かめたところ存在はしている模様。。


その3.REPAIR TABLE
調べたところhttp://dev.mysql.com/doc/refman/4.1/ja/repair-table.htmlにて

REPAIR TABLE を使用すれば、ほとんどの場合、MyISAM テーブルのすべてのデータを取り戻せます。

という素晴らしいcmdが有る模様。早速藁にすがる思いで叩いたら。

/var: write failed, file system is full

とか言いやがってkillされますた。で確かめると確かに/varの使用量がが100%になってました。という事で/varの中身を何とか片付けてmysqlを再起動し、

mysql> repair table sessions;
+---------------------+--------+----------+----------+
| Table               | Op     | Msg_type | Msg_text |
+---------------------+--------+----------+----------+
| ********.sessions   | repair | status   | OK       |
+---------------------+--------+----------+----------+
1 row in set (8.00 sec)

キターーー!!
(DB名は伏せさせていただきました。)


その4.復帰。
そしてmysqlapacheをリスタートしサイトを確認したところ無事動いておりログイン状態も保持されとるのでsessionsのリペアもうまく行った様子でひとまず完了。



そんなREPAIRに助けられた土曜の夜でした。