所以,
我有一个个人 wiki,用于记录代码和编程实践以及 StackOverflow 上的所有好东西。我链接到 SO 答案上的其中一个页面,然后 BOOM!垃圾邮件机器人。
不幸的是,由于没有对此做好准备,导致现在我的大多数网页上都充斥着一些我永远不会点击的网站的链接。
我的问题是,我如何才能进行批量回滚,而不是逐个回滚。例如,有没有办法可以删除特定 IP 地址所做的所有更改?还是我必须逐个浏览每个页面并手动回滚。
谢谢你的帮助!
编辑:MediaWiki 的回滚系统似乎也不太直观。机器人对每个页面至少做了 12 处更改,而我无法将其回滚到 12 处更改之前。
答案1
您可以随时从备份中恢复数据库,对吗?
这在 meta.wikimeda.org 上恢复方法应该可以工作,但是正如你所指出的,这在大量页面上行不通。
我认为您可以手动进入 MySQL 数据库并清除到垃圾邮件机器人之前的状态,但我不确定它如何工作。
答案2
基于 Stan Sokolov 的 SQL 查询,我成功清理了我的 wiki 中的一大堆乱七八糟的东西 - 我已经半年没有监控它了,它充满了垃圾邮件。我必须从特定日期开始清理它。
如果您要尝试相同操作,请先备份 -这些 SQL 查询可能会破坏您的 wiki、杀死小猫并导致怀孕。
在这个例子中,“tr_”是我的前缀,“189”是最后一个好的页面id,“41”是最后一个好的用户id,“20130215152547”是第一个垃圾邮件输入日期。
#Update page state to last good before the date
UPDATE tr_page p SET p.page_latest=( SELECT MAX(r.rev_id) FROM tr_revision r
WHERE r.rev_page=p.page_id
AND rev_timestamp <20130215152547) WHERE p.page_id IN
(SELECT r2.rev_page FROM tr_revision r2 WHERE rev_timestamp >=20130215152547);
#Update page length to match actual
UPDATE tr_page p SET p.page_len=( SELECT r.rev_len FROM tr_revision r WHERE
r.rev_page=p.page_id AND r.rev_id=p.page_latest );
#Clean up spam revisions
DELETE FROM tr_revision WHERE rev_timestamp >=20130215152547;
#Clear recent changes
DELETE FROM tr_recentchanges WHERE rc_timestamp >=20130215152547;
#Block all new bad users from ever entering wiki with this login
UPDATE tr_user SET
user_password = '',
user_newpassword = '',
user_email = '',
user_token = ''
WHERE user_id>41;
#Delete pages, staring from the last good id
DELETE FROM tr_page WHERE page_id>189;
#Also, you will need TO clean TABLE tr_pagelinks.
#You will have to do it manually. It's easy, use some editor
#like PHPMyAdmin or SQLyog
#Clean cache
DELETE FROM `tr_objectcache`;
DELETE FROM `tr_querycache`;
DELETE FROM `tr_querycachetwo`;
答案3
http://www.mediawiki.org/wiki/Extension:Nuke是一个扩展,可让您删除某个用户/IP 创建的所有页面。Hello71 在评论中提到的 JS 脚本可让您回滚某个用户的所有更改。一起使用时,效果非常好。
对于您的具体情况,即多个机器人对每个页面进行 12 处更改,我不知道该如何处理。