डेटाबेस में सीधे हेरफेर करके आप जो करना चाहते हैं, वह करना भी संभव है। आपकी स्थिति के आधार पर विवरण थोड़ा भिन्न हो सकते हैं, लेकिन मूल कदम कुछ इस तरह से होंगे:
अपनी विकी को केवल पढ़ने के लिए मोड पर सेट करें । जब आप डेटाबेस के साथ खिलवाड़ कर रहे हों तो आप नहीं चाहते कि कोई विकि को संपादित करने का प्रयास करे।
अपने विकी का बैकअप बनाएं। (यह वैसे भी किसी भी अपरिवर्तनीय बड़े पैमाने पर हटाने से पहले अनुशंसित है।)
स्पैमर्स द्वारा बनाए गए सभी उपयोगकर्ता खातों को हटाएं। यदि, ऊपर दिए गए प्रश्न के अनुसार, आप केवल मान्य उपयोगकर्ता थे, तो आप बस कर सकते हैं:
DELETE FROM user WHERE user_id != YOUR_USER_ID;
वैकल्पिक रूप से, यदि स्पैमर्स द्वारा विकी की खोज के बाद कोई नया वैध खाता नहीं बनाया गया था, तो आप उच्चतम वैध उपयोगकर्ता आईडी नंबर प्राप्त कर सकते हैं:
DELETE FROM user WHERE user_id > LAST_VALID_USER_ID;
या आप मान्य खातों को मैन्युअल रूप से निकालने और बाकी को हटाने के लिए phpMyAdmin जैसे एक व्यवस्थापक उपकरण का उपयोग कर सकते हैं।
हटाए गए खातों से जुड़े अतिरिक्त डेटा को साफ करें। यह कड़ाई से आवश्यक नहीं है, लेकिन उन अनाथ रिकॉर्ड का कोई उपयोग नहीं है और यदि आप उन्हें नहीं हटाते हैं तो बस अपने डेटाबेस को अव्यवस्थित कर देंगे:
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);
मान्य उपयोगकर्ता द्वारा नहीं किए गए किसी भी संशोधन को हटाएं:
यह बड़ा कदम है; तैयारी से पहले सब कुछ, इसके बाद सब कुछ सफाई है। हटाए गए सभी स्पैम खातों के साथ, आप बस यह कर सकते हैं:
DELETE FROM revision WHERE rev_user > 0 AND rev_user NOT IN (SELECT user_id FROM user);
यदि आपकी विकि में अनाम संपादन अक्षम है (जिसे मैं निजी / परीक्षण विकियों के लिए दृढ़ता से सलाह देता हूं), तो सभी स्पैम संशोधनों से छुटकारा पाने के लिए उपरोक्त क्वेरी पर्याप्त होनी चाहिए। यदि आपने अनोन संपादन सक्षम किया है, तो आपको अनाम स्पैम को अलग से संलग्न करना होगा ।
यदि आप सुनिश्चित हैं कि आपके विकी पर सभी संपादन संपादन स्पैम हैं, तो केवल UID 0 द्वारा किए गए एकमात्र संपादन जो हमें संरक्षित करने की आवश्यकता हो सकती है, वे स्वयं MediaWiki द्वारा बनाए गए हैं (जैसे कि विकी के बाहर से आयात किए गए पृष्ठ)। उस स्थिति में, निम्नलिखित क्वेरी की तरह कुछ काम करना चाहिए:
DELETE FROM revision WHERE rev_user = 0 AND rev_user_text BETWEEN '1' AND '999';
यह यूआईडी 0 द्वारा किसी भी संशोधन को हटा देगा जहां उपयोगकर्ता आईपीवी 4 पते की तरह दिखता है (अस्पष्ट रूप से); अर्थात्, यह 1 और 9 के बीच के अंक से शुरू होता है।
यदि आपके विकी में कुछ वास्तविक वैध एनोन संपादन हैं, तो आपको थोड़ा और रचनात्मक होना पड़ सकता है। यदि वैध अपंजीकृत संपादकों द्वारा उपयोग किए जाने वाले आईपी पतों की संख्या सीमित है, तो आप केवल AND rev_user_text NOT IN ('1.2.3.4', '5.6.7.8', '9.10.11.12')
उन IP से हटाए गए क्वेरी में योगदान को बाहर करने के लिए ऊपर दिए गए क्वेरी की तरह एक खंड जोड़ सकते हैं । आप AND rev_user_text NOT LIKE '192.168.%'
एक विशेष उपसर्ग के साथ शुरू होने वाले आईपी पते से सभी संपादन को बचाने के लिए , जैसे कि स्थिति भी जोड़ सकते हैं ।
ऊपर दिए गए प्रश्नों से स्पैम संशोधनों से छुटकारा मिल जाएगा (हालांकि उनकी सामग्री अभी भी text
तालिका में रहेगी ), लेकिन page_latest
किसी भी प्रभावित पृष्ठों के क्षेत्र को एक बिना किसी संशोधन के इंगित करते हुए छोड़ देंगे । यह भ्रम पैदा कर सकता है, इसलिए हम इसे ठीक कर देंगे।
सबसे पहले, हमें page_latest
सभी पृष्ठों के लिए कॉलम को मिटा देना होगा :
UPDATE page SET page_latest = 0;
इसके बाद, हम कॉलम को फिर से बनाएंगे, या तो संलग्नक.स्टेप रखरखाव स्क्रिप्ट चलाकर (अनुशंसित, --fix
पैरामीटर का उपयोग करने के लिए याद रखें ताकि स्क्रिप्ट वास्तव में डेटाबेस को बदल दे) या मैनुअल SQL क्वेरी के साथ:
UPDATE page SET page_latest =
(SELECT MAX(rev_id) FROM revision WHERE rev_page = page_id);
अंत में, हम उन सभी पृष्ठों को हटा देंगे जिनके लिए कोई वैध संशोधन नहीं पाया जा सका (क्योंकि वे स्पैमर्स द्वारा बनाए गए थे, और उनके पास कभी कोई सामग्री नहीं थी):
DELETE FROM page WHERE page_latest = 0;
एक अंतिम स्पर्श के लिए, पुनर्निर्माण, पाठ अनुक्रमणिका और हाल ही में परिवर्तन तालिकाओं को फिर से बनाएँ । आप डेटाबेस से हटाए गए स्पैम संशोधनों की सामग्री को निकालना भी चाह सकते हैं, ताकि वे purgeOldText.php रखरखाव स्क्रिप्ट चलाकर वहां अनावश्यक स्थान न लें ।
एक बार जब यह पूरा हो जाता है, तो जांचें कि सब कुछ अच्छा लग रहा है, और यदि ऐसा है, तो रीड-ओनली मोड को बंद कर दें - समस्या को फिर से रखने के लिए कुछ एंटी-स्पैम सुविधाओं को स्थापित करने के बाद ।