るいすときのこの物語

オタクエンジニアの雑記

【Wordpress】カテゴリーという概念そのものが無くなった場合の対処法【MySQL】


あまりの Apache2 のメモリ使用量が多かったので調整してたらカテゴリーが表示されなくなった! メモリ使用量が多すぎて 5.5GB の9割は消費されてた。

ブログに何回かアクセスしたり、管理画面に入るとすぐ 500 Internal Server Error を吐く。 まあ プロセス数を調整したりして解決したのですが、よく気づくとカテゴリーが表示されなくなってた!

 

 

原因

Wordpress のデータベースの "wp_term_taxonomy" の破損原因だった。 なんでこんなことが起こったのか分かりませんがメモリが消費されまくってて MySQL の処理に一部支障をきたした(分からない) とりあえず修復して治ったので "wp_term_taxonomy" の破損が原因ってのは分かりました。

 

[source]

 mysqldump -u root -p wordpress > /home/luis/sql/wordpress.sql

mysqldump: Error 1194: Table 'wp_term_taxonomy' is marked as crashed and should be repaired when dumping table wp_te rm_taxonomy at row: 1128

[/source]

こんな感じにデータベースのバックアップを取ろうとすると破損してるってマークされるし直したほうがいいよってことでエラーを吐きます。

 

 

対処

[source]

mysql -u root -p

mysql > use wordpress; mysql > check table wp_taxonomy;

[/source]

MySQL に接続して wordpress に使ってるデータベースを選択してテーブルをチェックしてみる。

 

[source]

+--------------------------+-------+----------+-------------------------------------------------------------+ | Table | Op | Msg_type | Msg_text | +--------------------------+-------+----------+-------------------------------------------------------------+ | wordpress.wp_commentmeta | check | warning | Table is marked as crashed and last repair failed | | wordpress.wp_commentmeta | check | warning | Size of indexfile is: 370688 Should be: 4096 | | wordpress.wp_commentmeta | check | error | Found key at page -1 that points to record outside datafile | | wordpress.wp_commentmeta | check | error | Corrupt | +--------------------------+-------+----------+-------------------------------------------------------------+

[/source]

↑はまた違うテーブルだけどこんな感じにエラーを吐いてくれる。 あとはこれを虱潰しで修復していくだけ。

 

[source]

mysql> repair table wp_term_taxonomy;

+----------------------------+--------+----------+----------+ | Table | Op | Msg_type | Msg_text | +----------------------------+--------+----------+----------+ | wordpress.wp_term_taxonomy | repair | status | OK | +----------------------------+--------+----------+----------+

[/source]

これでカテゴリーを表示されることを確認する。