Il est également possible de faire ce que vous voulez en manipulant directement la base de données. Les détails peuvent varier un peu en fonction de votre situation, mais les étapes de base se présenteraient comme suit:
Réglez votre wiki en mode lecture seule . Vous ne voulez pas que quelqu'un essaie de modifier le wiki pendant que vous jouez avec la base de données.
Faites une sauvegarde de votre wiki. (Ceci est fortement recommandé avant toute suppression de masse irréversible de toute façon.)
Supprimez tous les comptes d'utilisateurs créés par les spammeurs. Si, comme dans la question ci-dessus, vous étiez le seul utilisateur valide, vous pouvez simplement faire:
DELETE FROM user WHERE user_id != YOUR_USER_ID;
Alternativement, si aucun nouveau compte valide n'a été créé après que les spammeurs ont découvert le wiki, vous pouvez trouver le numéro d'ID utilisateur valide le plus élevé et faire:
DELETE FROM user WHERE user_id > LAST_VALID_USER_ID;
Ou vous pouvez utiliser un outil d'administration comme phpMyAdmin pour sélectionner manuellement les comptes valides et supprimer les autres.
Nettoyez les données supplémentaires associées aux comptes supprimés. Ce n'est pas strictement nécessaire, mais ces enregistrements orphelins n'ont aucune utilité et ne feront qu'encombrer votre base de données si vous ne les supprimez pas:
DELETE FROM user_groups WHERE ug_user NOT IN (SELECT user_id FROM user);
DELETE FROM user_properties WHERE up_user NOT IN (SELECT user_id FROM user);
DELETE FROM user_newtalk WHERE user_id NOT IN (SELECT user_id FROM user);
Supprimez toutes les révisions non effectuées par un utilisateur valide:
C'est le grand pas; tout avant la préparation, tout après le nettoyage. Avec tous les comptes de spam supprimés, vous pouvez simplement faire:
DELETE FROM revision WHERE rev_user > 0 AND rev_user NOT IN (SELECT user_id FROM user);
Si votre wiki avait désactivé l'édition anonyme (ce que je recommande fortement pour les wikis privés / de test), la requête ci-dessus devrait être suffisante pour se débarrasser de toutes les révisions de spam. Si vous aviez activé la modification, vous devrez neutraliser le spam anonyme séparément.
Si vous êtes sûr que toutes les modifications anon sur votre wiki sont du spam, les seules modifications apportées par l'UID 0 que nous pourrions avoir besoin de conserver sont celles effectuées par MediaWiki lui-même (telles que les pages importées de l'extérieur du wiki). Dans ce cas, quelque chose comme la requête suivante devrait fonctionner:
DELETE FROM revision WHERE rev_user = 0 AND rev_user_text BETWEEN '1' AND '999';
Cela supprimera toutes les révisions de l'UID 0 où le nom d'utilisateur ressemble (vaguement) à une adresse IPv4; c'est-à-dire qu'il commence par un chiffre compris entre 1 et 9.
Si votre wiki contient des modifications anon légitimes, vous devrez peut-être faire preuve d'un peu plus de créativité. Si le nombre d'adresses IP utilisées par des éditeurs légitimes non enregistrés est limité, vous pouvez simplement ajouter une clause similaire AND rev_user_text NOT IN ('1.2.3.4', '5.6.7.8', '9.10.11.12')
à la requête ci-dessus pour exclure les contributions de ces adresses IP de la suppression. Vous pouvez également ajouter des conditions telles que, par exemple, AND rev_user_text NOT LIKE '192.168.%'
pour enregistrer toutes les modifications des adresses IP commençant par un préfixe particulier.
Les requêtes ci-dessus supprimeront les révisions de spam (bien que leur contenu restera toujours dans le text
tableau), mais laissera le page_latest
champ de toutes les pages affectées pointant vers une révision inexistante. Cela pourrait provoquer de la confusion, nous ferions donc mieux de le réparer.
Tout d'abord, nous devons effacer la page_latest
colonne pour toutes les pages:
UPDATE page SET page_latest = 0;
Ensuite, nous reconstruirons la colonne, soit en exécutant le script de maintenance attachLatest.php (recommandé; n'oubliez pas d'utiliser le --fix
paramètre pour que le script change réellement la base de données) ou avec une requête SQL manuelle:
UPDATE page SET page_latest =
(SELECT MAX(rev_id) FROM revision WHERE rev_page = page_id);
Enfin, nous supprimerons toutes les pages pour lesquelles aucune révision valide n'a pu être trouvée (car elles ont été créées par des spammeurs et n'ont jamais eu de contenu valide):
DELETE FROM page WHERE page_latest = 0;
Pour une touche finale, reconstruisez les liens, l'index de texte et les tables de modifications récentes en exécutant le script de maintenance rebuildall.php . Vous pouvez également supprimer le contenu des révisions de spam supprimées de la base de données, afin qu'elles n'y occupent pas d'espace inutile, en exécutant le script de maintenance purgeOldText.php .
Une fois que tout est terminé, vérifiez que tout semble correct et, dans l'affirmative, désactivez le mode lecture seule - espérons-le après avoir installé certaines fonctionnalités anti-spam pour éviter que le problème ne se reproduise.