2015年7月17日金曜日

Mysqlのリペア

仕事のWebサイトが、突如表示されなくなった。
どうやら、MySQLの接続障害のようだ。

調べていくと、MySQLのデータが格納されているLinuxサーバーの /var ディレクトリが
オーバーフローしたらしい。

MySQLのデータは消せない。
/var/apt/cache/archives にもたんまりキャッシュファイルが溜まっていたので、
# apt-get clean
で掃除。
これで /var に40%くらいの空きができた。

Webサイトが表示され、復活! と思いきやログインができない。
どうやら、オーバーフローの接続障害の際、MySQLのtableが損傷を受けたようだ。

mysql をリスタートさせると
 # ERROR 144 (HY000) at line 1: Table './database_name/***_session' is marked as crashed and last (automatic?) repair failed
なんてエラーを吐く。

調べるとtableをリペアする方法があるらしい。
http://blog.cloudpack.jp/2011/07/27/server-news-mysql-restoration/

# mysql -u root -p
mysql> repair table ***_session;

……… 1時間以上反応なし。killする。

困った、さらにググる。
myisamchk という修復コマンドがあるらしい。
http://www.bnote.net/mysql/19_myisamchk.shtml


まずは、apache2 と mysqlを停止
# invoke-rc.d apache2 stop
# invoke-rc.d mysql stop

修復コマンド
myisamchk -r /var/lib/mysql/database_name/***_session.MYI

あ、何か走った。


2019.09.09 追記
Mysqlの仕様の変更で、ファイル名に".MYI"を含めて実行すると
myisamchk: error: 140 when opening MyISAM-tabl 'Fail_Name.MYI'\
とエラーを吐かれて上手くいかない。
ファイル名'.MYI'の拡張子を省いて実行するとよい。
myisamchk -r  でもうまく行かない場合は、Safe-Recoverの -o オプションで実行すると幸せになれるかもしれない。



まずは、apache2 と mysqlを起動
# invoke-rc.d apache2 start
# invoke-rc.d mysql start

ログインできるように回復した。


0 件のコメント:

コメントを投稿