Como apagar corretamente todo o conteúdo da página no MediaWiki?

2

Eu encontrei esta página que explica como apagar todas as páginas no MediaWiki, mas não estou nada convencido de que executar DELETE FROM page; seja uma boa ideia. O esquema do MediaWiki é bastante complexo e apenas excluir a tabela page provavelmente deixa muitas dependências não resolvidas no banco de dados que não serão resolvidas.

No entanto, quero excluir completamente todas as páginas de um wiki (na verdade, uma cópia de um wiki). Existe uma maneira um pouco simples de fazer isso?

    
por guaka 22.06.2015 / 11:51

2 respostas

4

Uma ligeira modificação da grande resposta fornecida por Tgr: por alguma razão, o MySQL no nosso servidor MediaWiki (e seu clone para ser apagado) recusou as construções CASE...WHEN...THEN , então eu fiz as substituições equivalentes no shell:

:; mysql my_wiki -s -N -e \
     "SELECT CONCAT(page_namespace, ':', page_title) FROM page;" | \
     sed -e 's,^0:,:,' -e 's,^1:,Talk:,' \
         -e 's,^2:,User:,' -e 's,^3:,User talk:,' \
         -e 's,^6:,File:,' -e 's,^7:,File talk:,' \
         -e 's,^[0-9][0-9]*:.*$,,' \
     | egrep -v '^$' > /DUMP/wikipage-list-utf8.txt

Se você precisar revisar a listagem e seu terminal não for UTF-8 (como o meu não foi), você pode iconv do arquivo de texto para a codificação do terminal, por exemplo:

:; iconv -f utf8 -t cp1251 < /DUMP/wikipage-list-utf8.txt

Além disso, pelo que vale a pena, os namespaces definidos nessa instalação específica da Wikimedia (de acordo com a consulta api.php) foram:

<ns id="-2" case="first-letter" canonical="Media" xml:space="preserve">Медиа</ns>
<ns id="-1" case="first-letter" canonical="Special" xml:space="preserve">Служебная</ns>
<ns id="0" case="first-letter" content="" xml:space="preserve" />
<ns id="1" case="first-letter" subpages="" canonical="Talk" xml:space="preserve">Обсуждение</ns>
<ns id="2" case="first-letter" subpages="" canonical="User" xml:space="preserve">Участник</ns>
<ns id="3" case="first-letter" subpages="" canonical="User talk" xml:space="preserve">Обсуждение участника</ns>
<ns id="4" case="first-letter" subpages="" canonical="Project" xml:space="preserve">Simsla</ns>
<ns id="5" case="first-letter" subpages="" canonical="Project talk" xml:space="preserve">Обсуждение Simsla</ns>
<ns id="6" case="first-letter" canonical="File" xml:space="preserve">Файл</ns>
<ns id="7" case="first-letter" subpages="" canonical="File talk" xml:space="preserve">Обсуждение файла</ns>
<ns id="8" case="first-letter" subpages="" canonical="MediaWiki" xml:space="preserve">MediaWiki</ns>
<ns id="9" case="first-letter" subpages="" canonical="MediaWiki talk" xml:space="preserve">Обсуждение MediaWiki</ns>
<ns id="10" case="first-letter" canonical="Template" xml:space="preserve">Шаблон</ns>
<ns id="11" case="first-letter" subpages="" canonical="Template talk" xml:space="preserve">Обсуждение шаблона</ns>
<ns id="12" case="first-letter" subpages="" canonical="Help" xml:space="preserve">Справка</ns>
<ns id="13" case="first-letter" subpages="" canonical="Help talk" xml:space="preserve">Обсуждение справки</ns>
<ns id="14" case="first-letter" canonical="Category" xml:space="preserve">Категория</ns>
<ns id="15" case="first-letter" subpages="" canonical="Category talk" xml:space="preserve">Обсуждение категории</ns>

Lamentamos que as tags estejam localizadas, mas os nomes "canônicos" são o que procuramos e são descritivos o suficiente.

Além dos itens que eu havia convertido com sed acima, havia também entradas nos namespaces 8, 10 e 12 que pareciam mais "dados do sistema" em vez de conteúdo do usuário, e a intenção era reutilizar a configuração da instalação existente somente sem o conteúdo - então eu não os transmita para o script de exclusão, como em:

:; php deleteBatch.php /DUMP/wikipage-list-utf8.txt

Obrigado ao Tgr pelo excelente e vinculado post - foi tudo que eu precisava para começar:)

No que diz respeito às ferramentas fornecidas com o MediaWiki, essa era a exclusão "adequada" do conteúdo, a realocação no banco de dados para que ele pudesse ser recuperado. Para limpeza real, isso deve ser limpo no nível do banco de dados. No nosso caso, não nos importamos muito com o conteúdo (nós nos preocupamos que ele deveria ser removido do clone, apenas a configuração era necessária para criar um novo site wiki), então abaixo está mais ou menos o que eu fiz, de acordo com o log de histórico do MySQL ( Eu revisei o dump SQL do banco de dados para ver quais tabelas tinham mais tamanho e conteúdo, e não pareciam conter dados do sistema como trechos de texto de ajuda ou localização):

DELETE FROM text WHERE old_id IN (SELECT ar_text_id FROM archive);
DELETE FROM files WHERE old_id IN (SELECT fa_id FROM filearchive);
delete from logging;
delete from archive;
delete from filearchive;
delete from recentchanges;
delete from searchindex;
delete from uploadstash;
delete from watchlist;
delete from ipblocks;
delete from objectcache;
update user set user_password = 'cV%@4dF.' where user_id not in (1,2,3);

Eu também limpei os arquivos anexados com:

:; rm -f 'find mediawiki/images -type f'

Claro, não copie cegamente meus exemplos, a menos que você pretenda apagar todo o conteúdo e não apenas alguns subconjuntos, e mesmo assim fazer um backup do banco de dados e do diretório antes de fazer algo irreversível;)

    
por 19.07.2015 / 16:12
1

Você realmente quer dizer em branco (ou seja, editá-lo para substituir o texto com uma seqüência vazia, deixando o texto antigo e todas as versões anteriores publicamente visíveis no histórico da página) ou excluir?

A maneira mais fácil de excluir tudo provavelmente é obter uma lista de todas as suas páginas (use api.php?action=query&meta=siteinfo&siprop=namespaces para obter uma lista de todos os namespaces e seus nomes canônicos, então obtenha a lista de todas as páginas com SELECT CONCAT(CASE page_namespace WHEN 0 THEN '' WHEN 1 THEN 'Talk' ..., ':', page_title) FROM page e passe o arquivo que contém essa lista de páginas para deleteBatch.php .

Para o blanking, você pode usar a mesma lista com edit.php e alguns scripts do bash

Existem também várias ferramentas como pywikibot que podem fazer a exclusão para você se você não tiver shell acesso.

    
por 30.06.2015 / 07:55