After examining a customer’s 150,000+ row wp_comments table at work yesterday, I realized that they’d managed to let WordPress approve a massive amount of spam. Since there was no way I was going back thru all of that by hand, I knew that I had to come up with something clever.
Fortunately, running your already approved comments thru Akismet is pretty easy. Well, that might be a bit disingenuous. It’s easy for the geeky types that are comfortable with the MySQL command line and raw queries. So if you manage to fall into that category, feel free to give this a go…
- Fire up your favorite MySQL management tool and feed the following command to your WordPress database:
update wp_comments set comment_approved=’0′ where comment_approved=’1′;
This tells WordPress to take any comment already flagged as “approved” and set it to “pending”. - Visit “Comments” in your WordPress dashboard. You should notice that you’ve got a bunch of comments under “Pending”.
- So long as you have Akismet installed, you should have a button marked “Check for Spam”. Click it.
- This step is going to require some patience. You’ll need to wait while Akismet does its thing. This means chilling out while watching your browser’s “loading” animation spin for a little bit.
- If you have a lot of comments — and we’re talking about thousands — you might run into your server’s PHP execution timeout. You’ll know this has happened when you see either a 404 or aren’t redirected back to the “Comments” page. Don’t panic.
- If you run into a timeout, simply press “Back” in your browser and click “Check for Spam” again. When the number of comments listed under “Pending” stops decreasing, you’re really close to being done!
- Go back to the MySQL management tool you used in step one and give it one last command:
update wp_comments set comment_approved=’1′ where comment_approved=’0′;
This takes the “pending” comments and sets them back to “approved”. - Congratulations! Your comments are now much tidier and you’ve helped stamp out the spammers who’ve gotten past your defenses. Since your copy of Akismet has just done a bunch of heavy lifting, you might want to consider giving it a bit of a rest by implementing something like Hashcash as your first line of defense. When it comes to fighting spam, they’re a great combination.
If I can hack together a way to work around the PHP execution timeout issue, I’ll do my best to make this into a simple to use plugin. Since I’ve got a lot on my plate right now, I’d prefer it if the lazyweb could beat me to getting that done. Any takers?
Switching Things Up
Yesterday, I quietly switched this site over from its old Apache server to the much more lightweight combination of nginx + XCache. As someone who has worked with Apache servers for roughly 14 years now, the thought of moving my personal site to a server environment that I didn’t know how to troubleshoot in great detail was terrifying. But you start becoming irrelevant the second you allow yourself to stop learning new things. So I took a play from the Ol’ Jack Burton playbook and said “what the hell?“.
Surprisingly, it’s still chugging along without any complaints. Most of the thanks for that goes to DreamHost‘s default nginx config and easy to follow tutorial tho.
All I really needed to do to get it going was:
And while that might seem like that list had a bunch of stuff in it, I can honestly say that it took no more than 30 minutes to make those changes.
The only weird thing that has happened so far is that it had a weird memory spike last night — but that dropped off this morning for no discernible reason. Since everything has been level after that, I guess I’ll have to keep an eye on my graphs and make sure it’s not a nightly thing…
P.S. Since I’ve never been one to leave “good enough” alone, I’m going to keep making tweaks (and maybe start piling on a few more active sites) to see what nginx can do. Expect more nerdy updates on this eventually.