Tgr tarafından sağlanan büyük cevapta küçük bir değişiklik: bir nedenden dolayı, MediaWiki sunucumuzdaki MySQL (ve silinecek klonu) CASE...WHEN...THEN
yapıları reddetti, ben de eşdeğer değiştirmeleri yaptım:
:; 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
Listeyi gözden geçirmeniz gerekiyorsa ve terminaliniz UTF-8 değilse (benimki gibi), iconv
metin dosyasını terminalin kodlamasına yapabilirsiniz , örneğin:
:; iconv -f utf8 -t cp1251 < /DUMP/wikipage-list-utf8.txt
Ayrıca, buna değer, söz konusu Wikimedia kurulumunda (api.php sorgusuna göre) tanımlanan ad alanları şunlardır:
<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>
Maalesef, etiketler yerelleştirildi, ancak "kurallı" adlar peşinde olduğumuz şeyler ve yeterince açıklayıcılar.
sed
Yukarıda dönüştürdüğüm öğelerin yanı sıra, kullanıcı içeriği yerine "sistem verileri" gibi görünen ad alanı 8, 10 ve 12'de de girdiler vardı ve amaç mevcut kurulumun kurulumunu yalnızca içerik olmadan yeniden kullanmaktı - Onları şu şekilde olduğu gibi delete-script'e geçirmedim:
:; php deleteBatch.php /DUMP/wikipage-list-utf8.txt
Mükemmel detaylı ve bağlantılı yazı için Tgr'a teşekkürler - başlamak için ihtiyacım olan tek şey :)
MediaWiki ile sağlanan araçlar, içeriğin "uygun" bir şekilde silinmesi, veritabanına taşınması ve silinmemesi içindi. Gerçek silme için bunun veritabanı seviyesinde temizlenmesi gerekir. Bizim durumumuzda içeriğe pek aldırış etmedik (klondan çıkarılması gerektiğine dikkat ettik, yeni bir wiki sitesi oluşturmak için sadece kurulum gerekliydi), bu yüzden aşağı yukarı MySQL geçmiş günlüğüne göre yaptım. Hangi tabloların en çok boyut ve içeriğe sahip olduğunu görmek için veritabanının SQL dökümünü inceledim ve yardım veya yerelleştirme metin parçacıkları gibi sistem verilerini tutamadığı görülüyordu):
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);
Ayrıca ekli dosyaları kendileri ile sildim:
:; rm -f `find mediawiki/images -type f`
Tabii ki, sadece bazı alt kümeleri değil tüm içeriği silmek istemediğiniz sürece örneklerimi körlememem, ve daha sonra geri dönüşü olmayan bir şey yapmadan önce hem veritabanını hem de dizini yedeklemekten daha iyi bir yol;