Também é possível fazer o que você deseja, manipulando diretamente o banco de dados. Os detalhes podem variar um pouco, dependendo da sua situação, mas as etapas básicas seriam algo como isto:
Defina seu wiki para o modo somente leitura . Você não quer que alguém tente editar o wiki enquanto estiver mexendo com o banco de dados.
Faça um backup do seu wiki. (Isso é altamente recomendado antes de qualquer exclusão em massa irreversível.)
Exclua todas as contas de usuário criadas pelos remetentes de spam. Se, como na pergunta acima, você era o único usuário válido, basta:
DELETE FROM user WHERE user_id != YOUR_USER_ID;
Como alternativa, se nenhuma nova conta válida foi criada depois que os remetentes de spam descobriram o wiki, você pode encontrar o maior número de ID de usuário válido e fazer:
DELETE FROM user WHERE user_id > LAST_VALID_USER_ID;
Ou você pode usar uma ferramenta administrativa como o phpMyAdmin para escolher manualmente as contas válidas e excluir o restante.
Limpe os dados extras associados às contas excluídas. Isso não é estritamente necessário, mas esses registros órfãos não têm utilidade e apenas desorganizam o banco de dados se você não os excluir:
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);
Exclua as revisões não feitas por um usuário válido:
Este é o grande passo; tudo antes da preparação, tudo depois da limpeza. Com todas as contas de spam excluídas, você pode simplesmente:
DELETE FROM revision WHERE rev_user > 0 AND rev_user NOT IN (SELECT user_id FROM user);
Se o seu wiki teve a edição anônima desativada (o que eu recomendo fortemente para wikis particulares / de teste), a consulta acima deve ser suficiente para se livrar de todas as revisões de spam. Se você tivesse a edição anon ativada, no entanto, precisará eliminar o spam anônimo separadamente.
Se você tem certeza de que todas as edições anteriores do seu wiki são spam, as únicas edições feitas pelo UID 0 que precisamos preservar são aquelas feitas pelo próprio MediaWiki (como páginas importadas de fora do wiki). Nesse caso, algo como a seguinte consulta deve funcionar:
DELETE FROM revision WHERE rev_user = 0 AND rev_user_text BETWEEN '1' AND '999';
Isso excluirá quaisquer revisões do UID 0, nas quais o nome de usuário se parece (vagamente) com um endereço IPv4; isto é, começa com um dígito entre 1 e 9.
Se o seu wiki tem algumas edições reais legítimas, você pode precisar ser um pouco mais criativo. Se o número de endereços IP usados por editores não registrados legítimos for limitado, você poderá adicionar uma cláusula semelhante AND rev_user_text NOT IN ('1.2.3.4', '5.6.7.8', '9.10.11.12')
à consulta acima para excluir as contribuições desses IPs da exclusão. Você também pode adicionar condições como, por exemplo, AND rev_user_text NOT LIKE '192.168.%'
salvar todas as edições dos endereços IP, começando com um prefixo específico.
As consultas acima eliminam as revisões de spam (embora seu conteúdo ainda permaneça na text
tabela), mas deixam o page_latest
campo de todas as páginas afetadas apontando para uma revisão inexistente. Isso pode causar confusão, por isso é melhor corrigi-lo.
Primeiro, precisamos limpar a page_latest
coluna de todas as páginas:
UPDATE page SET page_latest = 0;
Em seguida, reconstruiremos a coluna executando o script de manutenção attachLatest.php (recomendado; lembre-se de usar o --fix
parâmetro para que o script realmente altere o banco de dados) ou com uma consulta SQL manual:
UPDATE page SET page_latest =
(SELECT MAX(rev_id) FROM revision WHERE rev_page = page_id);
Por fim, excluiremos todas as páginas para as quais não foram encontradas revisões válidas (porque foram criadas por remetentes de spam e nunca tiveram conteúdo válido):
DELETE FROM page WHERE page_latest = 0;
Para um toque final, recrie os links, o índice de texto e as tabelas de alterações recentes executando o script de manutenção rebuildall.php . Você também pode remover o conteúdo das revisões de spam excluídas do banco de dados, para que elas não ocupem espaço desnecessário, executando o script de manutenção purgeOldText.php .
Quando tudo estiver pronto, verifique se tudo está bem e, se estiver, desative o modo somente leitura - depois de instalar alguns recursos anti-spam, para evitar que o problema ocorra novamente.