Es ist auch möglich, das zu tun, was Sie wollen, indem Sie die Datenbank direkt bearbeiten. Die Details können je nach Situation etwas variieren, aber die grundlegenden Schritte würden ungefähr so aussehen:
Setze dein Wiki in den schreibgeschützten Modus . Sie möchten nicht, dass jemand versucht, das Wiki zu bearbeiten, während Sie mit der Datenbank herumspielen.
Erstellen Sie eine Sicherungskopie Ihres Wikis. (Dies wird dringend empfohlen, bevor irreversible Massenlöschungen vorgenommen werden.)
Löschen Sie alle von den Spammern erstellten Benutzerkonten. Wenn Sie, wie in der obigen Frage, der einzige gültige Benutzer waren, können Sie einfach Folgendes tun:
DELETE FROM user WHERE user_id != YOUR_USER_ID;
Wenn keine neuen gültigen Konten erstellt wurden, nachdem die Spammer das Wiki entdeckt haben, können Sie alternativ die höchste gültige Benutzer-ID-Nummer finden und folgendermaßen vorgehen:
DELETE FROM user WHERE user_id > LAST_VALID_USER_ID;
Oder Sie können ein Admin-Tool wie phpMyAdmin verwenden, um die gültigen Konten manuell auszuwählen und den Rest zu löschen.
Bereinigen Sie die zusätzlichen Daten, die mit den gelöschten Konten verknüpft sind. Dies ist nicht unbedingt erforderlich, aber diese verwaisten Datensätze haben keine Verwendung und überladen Ihre Datenbank nur, wenn Sie sie nicht löschen:
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);
Löschen Sie alle Revisionen, die nicht von einem gültigen Benutzer vorgenommen wurden:
Das ist der große Schritt; alles, bevor es Vorbereitung war, alles, nachdem es aufgeräumt wurde. Wenn alle Spam-Konten gelöscht sind, können Sie einfach Folgendes tun:
DELETE FROM revision WHERE rev_user > 0 AND rev_user NOT IN (SELECT user_id FROM user);
Wenn in Ihrem Wiki die anonyme Bearbeitung deaktiviert war (was ich für private / Test-Wikis dringend empfehle), sollte die obige Abfrage ausreichen, um alle Spam-Revisionen zu entfernen. Wenn Sie jedoch die anonyme Bearbeitung aktiviert haben, müssen Sie den anonymen Spam separat bereinigen .
Wenn Sie sicher sind, dass alle anonymen Änderungen in Ihrem Wiki Spam sind, müssen wir möglicherweise nur die Änderungen von UID 0 beibehalten, die von MediaWiki selbst vorgenommen wurden (z. B. von außerhalb des Wikis importierte Seiten). In diesem Fall sollte etwa die folgende Abfrage funktionieren:
DELETE FROM revision WHERE rev_user = 0 AND rev_user_text BETWEEN '1' AND '999';
Dadurch werden alle Überarbeitungen von UID 0 gelöscht, bei denen der Benutzername (vage) wie eine IPv4-Adresse aussieht. Das heißt, es beginnt mit einer Ziffer zwischen 1 und 9.
Wenn Ihr Wiki einige legitime Änderungen enthält, müssen Sie möglicherweise kreativer werden. Wenn die Anzahl der von legitimen nicht registrierten Redakteuren verwendeten IP-Adressen begrenzt ist, können Sie AND rev_user_text NOT IN ('1.2.3.4', '5.6.7.8', '9.10.11.12')
der obigen Abfrage einfach eine Klausel hinzufügen , um Beiträge dieser IPs vom Löschen auszuschließen. Sie können auch Bedingungen hinzufügen, AND rev_user_text NOT LIKE '192.168.%'
um beispielsweise alle Änderungen von IP-Adressen zu speichern, die mit einem bestimmten Präfix beginnen.
Bei den oben aufgeführten Abfragen werden die Spam-Revisionen entfernt (obwohl der Inhalt weiterhin in der text
Tabelle enthalten ist), aber page_latest
alle betroffenen Seiten, die auf eine nicht vorhandene Revision verweisen, werden nicht angezeigt. Dies könnte zu Verwirrung führen, daher sollten wir es besser beheben.
Zuerst müssen wir die page_latest
Spalte für alle Seiten löschen:
UPDATE page SET page_latest = 0;
Als Nächstes erstellen wir die Spalte neu, indem wir entweder das Wartungsskript attachLatest.php ausführen (empfohlen; denken Sie daran, den --fix
Parameter zu verwenden , damit das Skript die Datenbank tatsächlich ändert) oder eine manuelle SQL-Abfrage durchführen:
UPDATE page SET page_latest =
(SELECT MAX(rev_id) FROM revision WHERE rev_page = page_id);
Schließlich löschen wir alle Seiten, für die keine gültigen Überarbeitungen gefunden wurden (weil sie von Spammern erstellt wurden und keinen gültigen Inhalt hatten):
DELETE FROM page WHERE page_latest = 0;
Erstellen Sie für den letzten Schliff die Tabellen mit den Links, dem Textindex und den letzten Änderungen neu, indem Sie das Wartungsskript rebuildall.php ausführen . Möglicherweise möchten Sie auch den Inhalt der gelöschten Spam-Revisionen aus der Datenbank entfernen, damit sie dort keinen unnötigen Speicherplatz belegen , indem Sie das Wartungsskript purgeOldText.php ausführen .
Überprüfen Sie anschließend, ob alles in Ordnung ist, und deaktivieren Sie in diesem Fall den Nur-Lese-Modus - hoffentlich nach der Installation einiger Anti-Spam-Funktionen , damit das Problem nicht erneut auftritt.