このブログはさくらVPS+WordPressで運用してるんだけど、週に1度くらいはデータベース接続エラーが発生し、MySQLが強制終了してしまっていた。
毎日更新していた昔に比べてPVは少ないし、そんなにトラフィックが増えるなんてことはないはずなのに。
こうなるとどうしても原因を究明したくなる性格。
原因はコメントスパム
WordPressはとにかくコメントスパムが多い。
自分のようなブログでも週に2万件も書き込まれる。
そのトラフィックたるやすさまじく、秒間100M以上の負荷がかかり、サーバーにログインしようとしても無反応になるくらい。
コメントスパムに対してはAkismetを使って仕分けをしていたのだけど、これだけではダメだったみたい。
増え続けるMySQLへのアクセス
コメントスパム一つ一つのアクセスは微々たるものだが、Botを使って今ある記事に一気にアクセスし、コメントをつけられるとさすがに膨大なトラフィックとなる。
Akismetはコメントがつけられた後に表示するかどうかを判断するため、どうしてもMySQLへのアクセスが発生してしまう。
コメントスパムの大量書き込み+Akismetの仕訳処理が一気に発生した結果、高負荷によりMySQLがダウンし、データベース接続エラーになってしまったというわけだった。
対策
新たなプラグインとしてThrows SPAM Awayを導入してみた。
WordPress › Throws SPAM Away « WordPress Plugins
これは日本語が含まれていない書き込みをデータベースには書き込まない処理をしてくれるプラグイン。
これをインストールして3日放置してみた結果、スパムコメントは0になった。
これはすごい。
サーバーのトラフィックも安定している。
とりあえずこれで様子を見ることに。
データベース接続エラーが発生してしまったら
データベース接続エラーが発生したとき、最初は何をしていいかわからなかったので、WordPressの再インストールやデータベースのリカバリを行っていたが、実はそんなことをしなくても簡単に復旧できた。
rootでログインし、MySQLのディレクトリに移動
[root@ ~]# cd /var/lib/mysql エンターキー
次にib_logfile0とibdata1を削除する。
[root@ ~]# rm -Rf ib_logfile0 エンターキー
[root@ ~]# rm -Rf ibdata1 エンターキー
MySQLを再起動。
[root@ ~]# service mysqld restart エンターキー
これでほぼ復旧した。
奥が深いVPS+WordPress
レンタルサーバーとは違い、トラフィックの管理までしなければならないVPS。
自分で何でも出来る分、チューニングも自分でせねばならず、来るまでいうマニュアル車のようなもの。
なかなか勉強になるし面白い。
スパムは迷惑なこときわまりないけど、どうやって対策をとるか色々考えて実行するのは面白いね。
VPS+WordPressで運用している方の参考になれば幸いです。
くずのはさん、こんにちは。
お久しぶりです。
いやー、なかなか更新されないので、体調でも崩したのかと心配しましたよw
なんか、アカウントハックされたり、スパムに手を焼いたりで大変だったみたいですね。
料理やお酒や車の話題、楽しみにしていますので頑張ってください。(もちろんマイペースでw)
ところで、iTuneMatchっていうサービスが開始されたと最近知ったんですが、iSub+DAVと比べて、どうなんでしょうね?
興味ありません?
あら、まちがえた。
iSub+DAVじゃなくてiSub+VPSですね。
失礼しました。
これ気になってたんですよね!
せっかく何で人柱になってきます!w
良かったら記事にしますね!
更新時期が適当ですいません(;´Д`)
文章書いてても、後ろから子供がざっくり消してくれたりするので時間がなかなか取れないです(-_-;)w