Phục hồi hàng loạt trên MediaWiki


6

Vì thế,

Tôi có một wiki cá nhân mà tôi sử dụng để ghi lại mã và thực hành lập trình và tất cả những thứ hay ho ở StackOverflow. Tôi đã liên kết với một trong những trang trên câu trả lời SO và BÙM! Bots thư rác.

Thật không may, không được chuẩn bị cho điều này khiến hầu hết các trang của tôi hiện đầy các liên kết đến các trang web mà tôi sẽ không bao giờ bận tâm để nhấp vào.

Câu hỏi của tôi là, làm thế nào tôi có thể thực hiện một rollback hàng loạt, thay vì các rollback riêng lẻ. Chẳng hạn, có cách nào để tôi có thể xóa tất cả các thay đổi được thực hiện bởi một địa chỉ IP cụ thể không? Hoặc tôi phải đi riêng lẻ qua từng trang và cuộn chúng lại bằng tay.

Cảm ơn vì bất kì sự giúp đỡ!

Chỉnh sửa: Có vẻ như hệ thống rollback của MediaWiki cũng không trực quan. Các bot đã thực hiện ít nhất 12 thay đổi cho mỗi trang và tôi không thể khôi phục lại 12 thay đổi trước đây.


Chà, chỉ Google thôi: "rollback hàng loạt" sẽ bật lên tập lệnh JS của người dùng này: vi.wikipedia.org/wiki/User:John254/mass_rollback.js
Hello71

Câu trả lời:


5

Bạn luôn có thể khôi phục cơ sở dữ liệu từ bản sao lưu của mình, phải không?

Các hoàn nguyên các phương thức trên meta.wikimeda.org nên hoạt động, nhưng khi bạn chỉ ra rằng nó sẽ không bay trên một tấn trang.

Tôi nghĩ bạn có thể tự truy cập vào db db và thanh lọc lại trước khi gửi spam, nhưng tôi không chắc nó sẽ hoạt động như thế nào.


1

Dựa trên các truy vấn SQL của Stan Sokolov, tôi đã tìm cách dọn sạch một mớ hỗn độn khủng khiếp trong wiki của mình - Tôi đã không theo dõi nó trong nửa năm và nó chứa đầy thư rác. Tôi đã phải làm sạch nó từ ngày cụ thể.

Nếu bạn định thử, hãy sao lưu trước - những truy vấn sql có thể phá hủy wiki của bạn, giết mèo con và gây thai.

Trong ví dụ này, "tr_" là tiền tố của tôi, "189" là id trang tốt cuối cùng, "41" là id người dùng tốt cuối cùng và "20130215152547" là ngày nhập spam đầu tiên.

#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`;

Cảm ơn bạn rất nhiều! Điều này hoạt động như một cơ duyên, ngoại trừ "Trang ngẫu nhiên" vẫn truy cập vào các trang rác. Văn bản như sau được hiển thị: The revision #0 of the page named "TedderConover162" does not exist. This is usually caused by following an outdated history link to a page that has been deleted. Details can be found in the deletion log.
Lori

0

http://www.mediawiki.org/wiki/Extension:Nuke là một tiện ích mở rộng cho phép bạn xóa tất cả các trang được tạo bởi người dùng / IP. Tập lệnh JS được đề cập trong một nhận xét của Hello71 cho phép bạn khôi phục tất cả các thay đổi từ một người dùng nhất định. Được sử dụng cùng nhau, nó hoạt động khá tốt.

Đối với trường hợp cụ thể của bạn có 12 thay đổi cho mỗi trang từ nhiều bot, tôi không biết có thể xử lý tốt như thế nào.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.