てぃーだブログ › とりあえずやってみる! › 2012年12月

【PR】

  

Posted by TI-DA at

2012年12月21日

InnoDBにアクセス出来ない!

急にデータベースのテーブルにアクセス出来なくなり、

phpMyAdminで見ても全部「使用中」の表示になってて、

なーんにも出来なくなった。

テーブルエンジンは全てInnoDB。




とりあえずテーブルをチェックしてみる。


mysql> check table hoge_tbl;
+--------------------+-------+----------+------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+--------------------+-------+----------+------------------------------------------+
| hoge_tbl | check | Error | Table 'hoge_tbl' doesn't exist |
| hoge_tbl | check | error | Corrupt |
+--------------------+-------+----------+------------------------------------------+

・・・・う~~ん 見たことのないエラーが。


結局、リペアしようとrepair tableを打っても同じエラーが吐き出されるだけ。

Dumpを取ろうにも、やはりLockが掛かってて無理。

う~ん どうしたらいいだぁぁ!と悩みつつ、ひょっとしたらInnoDBがサポート

されてないのでは?・・・いやいや昨日まではちゃんと動いてたし・・・と思いつつ

show enginesを打ってみると、、、あれ、、、?

+------------+---------+----------------------------------------
| Engine | Support | ~(省略)~
+------------+---------+----------------------------------------
| MRG_MYISAM | YES      | ~(省略)~
| BLACKHOLE  | YES      | ~(省略)~
| CSV       | YES      | ~(省略)~
| MEMORY    | YES      | ~(省略)~
| FEDERATED  | YES      | ~(省略)~
| ARCHIVE    | YES      | ~(省略)~
| MyISAM     | DEFAULT  | ~(省略)~
+------------+---------+----------------------------------------


InnoDBがなーーーーーい!


なんでーーー???


とりあえず原因はこれっぽいのでInnoDBを呼び戻すため

どうしたらいいか調査。



調べたところ、どうにもib_logfileが影響してるっぽい。

/var/lib/mysql にある「ib_logfile0」「ib_logfile1」というファイルを消すと

正常に戻るようだが消すのはちょっと気が引けるので別のフォルダに

移動させ、MySQLを再起動。

そして再びshow enginesでストレージエンジンを確認すると・・・



+------------+---------+----------------------------------------
| Engine | Support | ~(省略)~
+------------+---------+----------------------------------------
| InnoDB     | YES      | ~(省略)~
| MRG_MYISAM | YES      | ~(省略)~
| BLACKHOLE  | YES      | ~(省略)~
| CSV       | YES      | ~(省略)~
| MEMORY    | YES      | ~(省略)~
| FEDERATED  | YES      | ~(省略)~
| ARCHIVE    | YES      | ~(省略)~
| MyISAM     | DEFAULT  | ~(省略)~
+------------+---------+----------------------------------------

よかった~~~ InnoDBが帰ってきた~~~

という事でテーブルにも正常にアクセスできるようになりました。





今回の要因の可能性のひとつですが、my.cnfでinnodb_log_file_size の

値を変更したらib_logfile*を削除してmysqldを再起動させる必要があるそうで、

古いログファイルが残っているとファイルサイズが違う為、エラーが出るようです。

そのエラーが今回の状況と似ているわけですが、自分を含め、周りの技術者にも

innodb_log_file_sizeを変更した人はいなかったんですよね~。

というかcnfファイルいじったら連絡あるはずだし・・・



ひとまず解決したし、これ以上の原因の解明は無理と判断し、今度からは

しっかり操作履歴も残すようにして、今回の件は完了という事にしました。  


Posted by フクタケ at 20:20Comments(0)MySQL