Ich erhielt vorhin den Hinweis, dass da wohl irgendwas in einem meiner Wikis nicht stimmt. Also kurz nachgeschaut, festgestellt, dass da ein Botnet sich verewigt hatte und dementsprechend geschaut, die Änderungen wieder zu entfernen. Da das betroffene Wiki allerdings länger schon nicht mehr aktiv war und im betroffenen Zeitraum keine legitime Edits zu vermuten waren, konnte ich mir die Arbeit etwas vereinfachen.
Denn MediaWiki bietet schon seit geraumer Zeit die Möglichkeit, das gesamte Wiki als ein großes XML-File zu exportieren. Also habe ich dies auf dem Server kurzerhand mittels
php dumpBackup.php --full --logs>~/wikibackup.xml
erledigt und erhielt für mein Wiki eine etwa 2MB große Datei. Da das Durchsuchen per Hand etwas langwierig geworden wäre, ich aber relativ genau einen Zeitraum eingrenzen konnte, war die Frage der Herangehensweise durchaus spannend. Brauchbare XML-Editoren ließen sich auf die Schnelle nicht finden (zumindest, die sowohl XPath konnten, dieses auch zum Arbeiten auf Knotenmengen unterstützen und sofort auffindbar waren) und so fiel dann doch der Blick auf das Mittel der Wahl: reguläre Ausdrücke.
Dementsprechend die Datei in meinen Regexp-Editor der Wahl geschmissen, kurz
^\s+<revision>(?:(?!<\/revision>).)*?<timestamp>2010-05-.*?<\/timestamp>.*?<\/revision>
ins Eingabefenster gehackt, jegliche Fundstellen ins Nirvana verschoben und hatte prompt eine um 50 KB kürzere Datei, in der das gesamte Wiki ohne Vandalismus abrufbar war.
Diese brauchte nun lediglich noch mit
cat ~/wikibackup.clean.xml |php ./importDump.php
zurück in etwas für MediaWiki Verarbeitbares transformiert werden und die Arbeit war erledigt.
Bei Gelegenheit wiederhole ich diesen Schritt vielleicht sogar noch einmal, um die Umlaute im Wiki zu beheben. Die stimmten aber eh bereits schon seit einem Update letztens nicht mehr, dürften aber durchaus die 5 Minuten Arbeit wert sein.
Update: Da der Importer von Mediawiki sich weigert, bestehende Seiten zu resetten und es dafür auch keine direkte Möglichkeit gibt, muss man einen kurzen Umweg gehen und in der pages-Tabelle die zu resettenden Seiten löschen und anschließend mit Hilfe der Maintainance-Scripte eine Reihe von Cleanup-Aufgaben anstoßen:
php ./deleteOrphanedRevisions.php
php ./rebuildall.php
Anschließend kann der Import-Vorgang wie gewünscht erfolgen.