大量のスパムを一気に消す方法
うちに帰って Thunderbird をひらくと、なにやら大量のメールが・・・。 スパムメールかと思ったら、なんとブログのほうに 300件以上のスパムが来襲していました。。 Akismet ごえを果たしたらしい…。
最初、ぽちぽち管理画面から消していましたが辛抱たまらんということで、データベースからの一括削除に切り替え。 知っている人にはどうということでもないですが、せっかくなのでやり方を紹介しておきます。
使うのは、phpMyAdmin などのデータベース管理ツール。 まぁなんでもいいのですが、これらから SQL を発行して削除します。
コメントが入るのは (wp)_comments というテーブルです。 でもって、画面操作でID 降順(投稿順)とかにならべてスパムを探し出します。 そうすると、スパムにはたいてい同じような条件が見えてくるハズ。 例えばホスト名が同一とか。
何か分かったら、とりあえず SQL で SELECT してみます。 phpMyAdmin の SQL 実行画面に入力。
- SELECT
- *
- FROM
- wp_comments
- WHERE
- comment_author_IP = '69.156.19.167';
WHERE 句に条件を入力。 条件が複数ある時は AND などでつなぎます。
うまく条件に当たれば、スパムコメントだけ表示されます。 また、注目すべきは「comment_approved」カラム。 WP はここの文字列を判定して表に出すか出さないかを決め、”1″ の場合は表示されます。 Akismet などにスパム判定された場合は “spam” と入ります。
というわけで、条件が良さそうなら comment_approved 項目を “spam” にアップデート。 間違わないように SELECT から条件となる WHERE 句をコピって、、
- UPDATE
- wp_comments
- SET
- comment_approved = 'spam'
- WHERE
- comment_author_IP = '69.156.19.167';
で完了です。 まぁ DELETE で削除してもいいですが、念のために・・・。 また、間違うと大変なことになるので事前にテーブルはバックアップしたほうがいいかもしれません。 絶対「;」の位置を間違わないよう、WHERE の前とかにいれると悲惨なことになります。。
こんなことしなくて済むのが一番ですが、緊急避難の場合などに思い出してもらえれば! 🙂