Cleanup Wiki from Mass Spam: Difference between revisions
No edit summary |
|||
Line 19: | Line 19: | ||
password=my_password | password=my_password | ||
user=joachim | user=joachim | ||
Before any modification, do a backup (and check if the created file contains the expecteds sql commands) | |||
mkdir -p /backup/mediawiki | |||
cd /backup/mediawiki | |||
mysqldump -u root -p wikidb >mediawiki-2023-01-11-before-cleanup.sql | |||
Since I am the only user with valuable content and my user id is 1, I came up with these sql commands to clean up. Worked well as far as I can tell: | Since I am the only user with valuable content and my user id is 1, I came up with these sql commands to clean up. Worked well as far as I can tell: | ||
Line 24: | Line 30: | ||
mysql -D wikidb -e "delete from watchlist where wl_user <> 1" | mysql -D wikidb -e "delete from watchlist where wl_user <> 1" | ||
mysql -D wikidb -e "delete from ipblocks" | mysql -D wikidb -e "delete from ipblocks" | ||
mysql -D wikidb -e "delete from logging where | mysql -D wikidb -e "delete from logging where log_actor <> 1" | ||
mysql -D wikidb -e "delete from recentchanges where | mysql -D wikidb -e "delete from recentchanges where rc_actor <> 1" | ||
mysql -D wikidb -e "delete from user_properties where up_user <> 1" | |||
mysql -D wikidb -e "delete from user where user_id <> 1" | mysql -D wikidb -e "delete from user where user_id <> 1" | ||
mysql -D wikidb -e "delete from user_groups where ug_user <> 1" | |||
mysql -D wikidb -e "delete from user_former_groups where ufg_user <> 1" | |||
mysql -D wikidb -e "delete from actor where actor_user > 1" | |||
mysql -D wikidb -e "delete from comment where comment_id in (select log_comment_id from logging where log_actor > 1)" | |||
mysql -D wikidb -e "delete from watchlist where wl_user <> 1" | mysql -D wikidb -e "delete from watchlist where wl_user <> 1" | ||
mysql -D wikidb -e "delete from text where old_id = (select ar_text_id from archive where | # mysql -D wikidb -e "delete from text where old_id = (select ar_text_id from archive where ar_actor <> 1)" | ||
mysql -D wikidb -e "delete from archive where | mysql -D wikidb -e "delete from archive where ar_actor <> 1" | ||
mysql -D wikidb -e "delete from text where old_id = (select rev_text_id from revision where | mysql -D wikidb -e "delete from uploadstash where us_user <> 1" | ||
mysql -D wikidb -e "delete from revision where | mysql -D wikidb -e "delete from filearchive where fa_actor <> 1" | ||
mysql -D wikidb -e "delete from image where img_actor <> 1" | |||
mysql -D wikidb -e "delete from oldimage where oi_actor <> 1" | |||
# mysql -D wikidb -e "delete from text where old_id = (select rev_text_id from revision where rev_actor <> 1)" | |||
mysql -D wikidb -e "delete from revision where rev_actor <> 1" | |||
mysql -D wikidb -e "delete from page where not exists (select 1 from revision r where page.page_id = r.rev_page)" | mysql -D wikidb -e "delete from page where not exists (select 1 from revision r where page.page_id = r.rev_page)" | ||
Only trace left of spammers are log entries from my earlier manual cleanup attempts. Can live with that :) | Only trace left of spammers are log entries from my earlier manual cleanup attempts. Can live with that :) |
Revision as of 15:53, 12 January 2023
Cleanup Wiki from Mass Spam
recently I recognized, the wiki was filled with many (>2000) new pages, all containing spam. Also I noticed there were about 20000 users registered, all spammers or without contributions.
I decided to allow edit only for registered users and deactivated automatic registering. So I put this in LocalSettings.php:
$wgGroupPermissions['*']['edit'] = false; $wgGroupPermissions['*']['createaccount'] = false;
Since I found no useful plugin to remove that many users and pages I did some research on the database table level. Mediawiki provided a useful [database schema] for this purpose.
My mediawiki database is mysql database wikidb. User is joachim. For ease of use of the mysql command I created this .my.cnf file
[mysql] password=my_password user=joachim
Before any modification, do a backup (and check if the created file contains the expecteds sql commands)
mkdir -p /backup/mediawiki cd /backup/mediawiki mysqldump -u root -p wikidb >mediawiki-2023-01-11-before-cleanup.sql
Since I am the only user with valuable content and my user id is 1, I came up with these sql commands to clean up. Worked well as far as I can tell:
mysql -D wikidb -e "delete from watchlist where wl_user <> 1" mysql -D wikidb -e "delete from ipblocks" mysql -D wikidb -e "delete from logging where log_actor <> 1" mysql -D wikidb -e "delete from recentchanges where rc_actor <> 1" mysql -D wikidb -e "delete from user_properties where up_user <> 1" mysql -D wikidb -e "delete from user where user_id <> 1" mysql -D wikidb -e "delete from user_groups where ug_user <> 1" mysql -D wikidb -e "delete from user_former_groups where ufg_user <> 1" mysql -D wikidb -e "delete from actor where actor_user > 1" mysql -D wikidb -e "delete from comment where comment_id in (select log_comment_id from logging where log_actor > 1)" mysql -D wikidb -e "delete from watchlist where wl_user <> 1" # mysql -D wikidb -e "delete from text where old_id = (select ar_text_id from archive where ar_actor <> 1)" mysql -D wikidb -e "delete from archive where ar_actor <> 1" mysql -D wikidb -e "delete from uploadstash where us_user <> 1" mysql -D wikidb -e "delete from filearchive where fa_actor <> 1" mysql -D wikidb -e "delete from image where img_actor <> 1" mysql -D wikidb -e "delete from oldimage where oi_actor <> 1" # mysql -D wikidb -e "delete from text where old_id = (select rev_text_id from revision where rev_actor <> 1)" mysql -D wikidb -e "delete from revision where rev_actor <> 1" mysql -D wikidb -e "delete from page where not exists (select 1 from revision r where page.page_id = r.rev_page)"
Only trace left of spammers are log entries from my earlier manual cleanup attempts. Can live with that :)