ブログ障害発生はDB Tableの破損による 落雷が原因?

September 2, 2018 – 8:28 am

一昨日、投稿記事(ポスト)が全て消滅してしまう障害が発生した。応急的措置として、バックアップデータをリストアして復元しておいたところだ。

応急的措置はともかく、障害発生の原因を調べなければならないということで、httpdの Error Logを確認し、原因を探ってみた。

結果、ブログデータを蓄積・保存しているDB管理システム(MySql)のTable が破損していることが明らかになり、破損部を修復することで、本ブログを全面的に復旧することができた。

Table 破損の原因は、障害発生時間から落雷によるものと考えられる。

httpd のError log を確認:すると、ブログ記事の検索部分にエラーが発生している部分が見いだされた。エラー部の一部を以下に示す:

[Thu Aug 30 16:37:51.066460 2018] [php7:notice] [pid 10827] [client 148.64.56.76:30920] WordPress database error Table './blogdb/wp_posts' is marked as crashed and should be repaired for query SELECT   wp_posts.ID FROM wp_posts  WHERE 1=1  AND wp_posts.post_type = 'post' AND ((wp_posts.post_status = 'publish'))  ORDER BY wp_posts.post_date DESC LIMIT 0, 10 made by require('wp-blog-header.php'), require_once('wp-includes/template-loader.php'), include('/themes/pop-blue/404.php'), get_sidebar, locate_template, load_template, require_once('/themes/pop-blue/sidebar.php'), include('/themes/pop-blue/rsidebar.php'), get_posts, WP_Query->query, WP_Query->get_posts

(ここに掲げた Error Logは、セキュリティ上の配慮から、編集している)

このError Logから DB blogdbの Table wp_postsが破損して(crashed)おり、修復(repair)する必要があることがわかる。

mysql で該当するTableを checkしエラーを確認 し、修復作業を行う:

mysql> check table wp_posts;
+-----------------+-------+----------+----------------------------------------------------------+
| Table           | Op    | Msg_type | Msg_text                                                 |
+-----------------+-------+----------+----------------------------------------------------------+
| blogdb.wp_posts | check | warning  | Table is marked as crashed                               |
| blogdb.wp_posts | check | warning  | 4 clients are using or haven't closed the table properly |
| blogdb.wp_posts | check | status   | OK                                                       |
+-----------------+-------+----------+----------------------------------------------------------+
3 rows in set (3.89 sec)

mysql> repair table wp_posts;
+-----------------+--------+----------+----------+
| Table           | Op     | Msg_type | Msg_text |
+-----------------+--------+----------+----------+
| blogdb.wp_posts | repair | status   | OK       |
+-----------------+--------+----------+----------+
1 row in set (26.11 sec)

修復作業後、Tableを再度チェックし、修復作業が正常に行われていることを確認

mysql> check table wp_posts;
+—————–+——-+———-+———-+
| Table | Op | Msg_type | Msg_text |
+—————–+——-+———-+———-+
| blogdb.wp_posts | check | status | OK |
+—————–+——-+———-+———-+
1 row in set (6.00 sec)

以上の修復作業を終えたところで本ブログが従来どおり正常に表示されていることを確認。

データベース破損の原因
システム上に残されている各種ログを確認すると、データベースが破損し障害が発生した時刻が丁度、我が家周辺にかなりの大きさの落雷があった時刻と一致している。これから、落雷発生とTableの書き換えがおこなわれていたのが同期し、Tableデータが破損したものと考える。

ただ、数年前に書いた、落雷で我が家の電気錠が壊れたで、サーバはUPS(無停電電源)を通して電源を確保しているので、落雷には問題ないと記していたが、落雷の電源サージにはUPSが必ずしも有効とは限らないかもしれない。電源サージへの対処を施さねばならないように考えた。
  


Post a Comment