11月 142013
 
シェアする

WordPressを利用するうえで大量のスパムコメントとの対応は切っても切れないものと思う。特にGoogleのPageRankが上がればあがるほど、スパムコメントが耐えない。本来であれば、スパムを行ってくる国々をアクセスブロックにしてしまえばいいのですが、今のところはデフォルトでインストールされているプラグイン「Akismet」を使ってコメントのスパム判定を行っております。スパム判定されるのはいいのですが、スパム判定された通数が多いとこれらの確認と削除も一苦労。。なので、今回は直接MySQLからコメントを削除する方法を書きます。


大きく3とおりを紹介します。

  1. コメント内容がないコメントの削除
  2. 投稿者がないコメントの削除
  3. 特定のIPアドレスからのコメントの削除

MySQLに接続し、対象となるテーブルを確認してください

私の場合WordPressのインストールの際にテーブル名のプレフィックスとして「wp_blog_」を指定したのでテーブル名は「wp_blog_comments」とりますが、これは利用されているWordPressの設定により異なりますのでご確認ください

コメント内容が全くないコメントの削除

以下のコマンドで、spam判定されており且つコメント内容が空っぽのものをIPアドレスで一覧表示できます。

mysql> select comment_author_IP, COUNT(*) AS COUNT from wp_blog_comments WHERE comment_content = "" and comment_approved = "spam" GROUP BY comment_author_IP ORDER BY COUNT DESC;
+-------------------+-------+
| comment_author_IP | COUNT |
+-------------------+-------+
| 113.92.46.183 | 39 |
| 113.92.46.155 | 31 |
| 183.14.85.208 | 21 |
| 69.197.189.51 | 9 |
| 192.187.126.154 | 7 |
| 69.197.189.44 | 6 |
| 192.187.126.146 | 2 |
| 69.197.189.43 | 2 |
| 69.197.189.47 | 1 |
| 69.197.189.26 | 1 |
+-------------------+-------+
10 row$s in set (0.00 sec)

確認したら、削除します。

mysql> delete from wp_blog_comments where comment_content = "" and comment_approved = "spam" ;
Query OK, 119 rows affected (0.01 sec)

これでコメントがないスパムコメントの削除は完了しました。

投稿者が入力されていないコメントの削除

以下のコマンドで、spam判定されており且つ投稿者が入力されていないものをIPアドレス一覧表示できます。

mysql> select comment_author_IP, COUNT(*) AS COUNT from wp_blog_comments WHERE comment_author = "" and comment_approved = "spam" GROUP BY comment_author_IP ORDER BY COUNT DESC;
+-------------------+-------+
| comment_author_IP | COUNT |
+-------------------+-------+
| 14.155.102.243 | 7 |
+-------------------+-------+
1 row in set (0.00 sec)

確認したら削除します。

mysql> delete from wp_blog_comments WHERE comment_author = "" and comment_approved = "spam";
Query OK, 7 rows affected (0.00 sec)

特定のIPアドレスからのコメントの削除

以下のコマンドを用いて、spam判定されているコメントをカウントし、さらに接続元IPアドレスで数を数え表示します。

mysql> select comment_author_IP, COUNT(*) AS COUNT from wp_blog_comments WHERE comment_approved = "spam" GROUP BY comment_author_IP ORDER BY COUNT DESC LIMIT 20;
+-------------------+-------+
| comment_author_IP | COUNT |
+-------------------+-------+
| 116.25.27.129 | 235 |
| 116.25.35.204 | 94 |
| 113.92.46.183 | 44 |
| 183.14.85.201 | 43 |
| 113.92.46.155 | 38 |
| 183.14.84.158 | 34 |
| 183.14.85.208 | 28 |
| 116.25.34.129 | 27 |
| 69.197.189.51 | 11 |
| 69.197.189.44 | 9 |
| 27.159.196.47 | 8 |
| 27.115.7.158 | 7 |
| 192.187.126.154 | 7 |
| 221.7.11.68 | 7 |
| 220.250.5.19 | 6 |
| 27.159.254.37 | 6 |
| 61.154.33.133 | 4 |
| 117.25.95.40 | 3 |
| 198.27.64.125 | 3 |
| 192.187.126.146 | 3 |
+-------------------+-------+
20 rows in set (0.01 sec)

一度ダッシュボードのコメントからスパム一覧を確認し、削除したいIPアドレスを検索しましょう。
本当に削除してよいコメントであれば、以下のとおりIPアドレスを指定して削除します。

接続元が、「116.25.27.129」のコメントを削除します。

mysql> delete from wp_blog_comments where comment_author_IP = "116.25.27.129";
Query OK, 235 rows affected (0.02 sec)

接続元が、「116.25.35.204」のコメントを削除します。

mysql>
mysql> delete from wp_blog_comments where comment_author_IP = "116.25.35.204";
Query OK, 94 rows affected (0.01 sec)

削除後は、指定したIPアドレスのコメントが削除されていることが確認できます。

mysql> select comment_author_IP, COUNT(*) AS COUNT from wp_blog_comments WHERE comment_approved = "spam" GROUP BY comment_author_IP ORDER BY COUNT DESC LIMIT 20;
+-------------------+-------+
| comment_author_IP | COUNT |
+-------------------+-------+
| 113.92.46.183 | 44 |
| 183.14.85.201 | 44 |
| 113.92.46.155 | 38 |
| 183.14.84.158 | 34 |
| 183.14.85.208 | 28 |
| 116.25.34.129 | 27 |
| 69.197.189.51 | 11 |
| 69.197.189.44 | 9 |
| 27.159.196.47 | 8 |
| 27.115.7.158 | 7 |
| 192.187.126.154 | 7 |
| 221.7.11.68 | 7 |
| 27.159.254.37 | 6 |
| 220.250.5.19 | 6 |
| 61.154.33.133 | 4 |
| 120.37.235.222 | 3 |
| 27.159.212.227 | 3 |
| 192.69.90.229 | 3 |
| 116.1.77.19 | 3 |
| 117.25.95.40 | 3 |
+-------------------+-------+
20 rows in set (0.00 sec)

WordPressのダッシュボードからの削除では操作が面倒ぐらいな数のスパムが有る場合には有効な手段だとおもいます。

以上です。

このエントリーをはてなブックマークに追加

  4 コメント

  1. >今はMariaDBが気になってます!
    CentOS7今年出る予定が来年?
    MariaDBになりますね。Fedora19で試してもいいんだけど、またやるのも面倒です。
    Fedora19 apacheで検索かけてみましたけど、apacheは2.2のままなのかな?
    Mysqlがoracleになって評判わるいし。データベース関連はどうかわるのか目が離せません。

  2. くりくりさん

    つい先ほど、MySQLからMariaDBに乗り換えてみました。一瞬ブログが止まってたともいます(^_^;)←実環境でやるなっていうww
    mysqlのアンインストールして、MariaDBのレポジトリを追加してyumでインストールして、service mysql start でOKでした。
    あっけなさすぎてちょっとついてイケなんですけど・・・・ とにかくMariaDBになりました

    MariaDB [(none)]> show variables like ‘ver%’;
    +————————-+———————+
    | Variable_name | Value |
    +————————-+———————+
    | version | 5.5.33a-MariaDB-log |
    | version_comment | MariaDB Server |
    | version_compile_machine | i686 |
    | version_compile_os | Linux |
    +————————-+———————+
    4 rows in set (0.00 sec)

    MariaDB [(none)]>

    Fedora19ですが、以下URLのページ半ば前の画像によると2.4のようです。
    http://www.howtoforge.com/installing-apache2-with-php5-and-mysql-support-on-fedora-19-lamp

    MariaDBって名前が可愛いので今後の成長に期待です(*´∀`*)

  3. こんばんは
    簡単にいけましたね。
    >実環境でやるなっていうww
    俺も経験ありますよ。
    複数teratermを起動させてserver.crt作るのにちゃんやってるのにうまくいかないなと思ったら
    テスト環境じゃなくて動いてるサーバーでした・・・。やっちまったと思い心臓ばくばく。
    誰しもが経験されることではないでしょうか?

    CentOS7も2.4になる可能性も?????
    ちなみにマリアとは開発者の次女の名前です。

  4. CentOS7はどうなんでしょうねぇ。

    次女の名前ですか!
    私の始めての彼女もMariaですww
    イタリア人でした!! っていらない情報をwwww

コメント大歓迎!質問も受け付けておりますヽ(*´∀`)ノ