WordPress – Purge des tables akismet
Hello les amis,
Nous verrons dans cet article comment faire le ménage sur le filtrage d’Akismet.
Akismet est un plugin très utile pour WordPress ( installé par défaut ). Ce plugin à une grande importance puisqu’il permet de faire automatique le ménage dans vos commentaires afin de supprimer les spams qui vous envahissent.
Je l’utilise également sur ce blog depuis le début, cela reste totalement gratuit ( si vous avez envie de tester ).
Le fonctionnement du plugin est tout simplement génial, cependant il laisse pas mal de lignes un peu inutiles dans l’une de vos tables SQL.
Selon le nombre de commentaires filtrés, cette table peut grossir d’une manière assez importante.
Quelle est cette table ?
Sachez que c’est la table « wp_commentmeta » qui est concernée ( à condition que vous avez gardé le « wp_ » comme début de table, sinon cette partie sera à adapter ).
Chaque filtrage d’akismet rajoutera une ligne dans cette table et selon le nombre, votre purge vous rapportera plus ou moins de place.
J’ai besoin de mon compte SQL ?
Absolument puisque il sera nécessaire de faire des DELETE dans votre table !
Un compte dédié qui possède au moins les « ALL PRIVILEGES » sur votre base de données WordPress.
Sauvegarde de votre BDD
Avant de faire cette intervention, vous devez sauvegarder votre base de données de cette manière :
mysqldump -hlocalhost -udjerfy_blog -pXXXXXXXX -v --opt -Q -B djerfy_blog | gzip -c > /tmp/Sauvegarde.djerfy_blog.sql.gz
Regardez aussi dans le « man mysqldump » afin de sortir uniquement votre table « wp_commentmeta ».
Connexion à la BDD
Nous utiliserons ici la connexion en ligne de commande. Cela peut aussi être effectué depuis phpMyAdmin.
Personnellement, je recommande pas trop l’utilisation du phpMyAdmin à cause des failles de sécurités.
Connectons nous sur notrr base de données, dans cet article, ma base correspond à « djerfy_blog » :
mysql -hlocalhost -udjerfy_blog -pXXXXXXXX djerfy_blog
Trouver les lignes inutiles
Maintenant que nous sommes dans le prompt MySQL, nous allons chercher les lignes qui ne possède plus de rapport entre les tables « wp_commentmeta » et « wp_comments ».
Afin de faire cela, passez cette requête :
SELECT * FROM wp_commentmeta WHERE comment_id NOT IN ( SELECT comment_id FROM wp_comments );
Si vous avez effectivement des entrées qui ne sont plus en relation, vous pouvez les supprimer à l’aide de cette requête :
DELETE FROM wp_commentmeta WHERE comment_id NOT IN ( SELECT comment_id FROM wp_comments );
Une fois que vos lignes inutiles sont supprimées, il vous faut vider la table « wp_commentmeta » des enregistrements d’Akismet.
La requêtes suivante permet de voir cela :
SELECT * FROM wp_commentmeta WHERE meta_key LIKE '%akismet%';
Et pour valider cela, il faut lancer cette requête :
DELETE FROM wp_commentmeta WHERE meta_key LIKE '%akismet%';
Conclusion
C’est maintenant terminé, vous voyez ce n’était pas très long !
L’idée est d’effectuer l’opération régulièrement, un script BASH à mettre en cron est actuellement en cours de mon côté et sera très prochainement disponible sur le dépôt SVN ainsi que le Redmine.