मैं एक MySQL तालिका को दूषित होने के लिए कैसे मजबूर कर सकता हूं?


17

मैंने एक सरल Nagios प्लगइन लिखा है जो mysqlcheck (जो दूषित तालिकाओं के लिए जाँच करता है) को कॉल करता है और यदि कोई भ्रष्ट है तो चेतावनी देगा।

हालाँकि अब मेरी कोई भी तालिका भ्रष्ट नहीं है। इसलिए मुझे यकीन नहीं है कि मेरा प्लगइन ठीक काम कर रहा है। मेरे पास एक देव सर्वर है जो कि महत्वपूर्ण नहीं है। मैं वहां की तालिकाओं के एक (या किसी भी) को कैसे भ्रष्ट कर सकता हूं ताकि मैं अपने नागों की चेतावनी का परीक्षण कर सकूं?

रिकॉर्ड के लिए सर्वर उबंटू डैपर है और mysql संस्करण 5.0 है


दिलचस्प .......
सैंडर वर्स्लिस

3
मान लें कि वे MyISAM टेबल हैं जिसकी मैं कल्पना करूंगा कि आप बस एक विंडो खोल सकते हैं। एक हल्की सी उथल-पुथल के कारण उन ACID फ्री टेबल्स को क्रैश करने, टिप करने और आग पकड़ने के लिए पर्याप्त होना चाहिए;)
डेविड

जवाबों:


1

आम तौर पर आप डेटाबेस को / var / lib / mysql से कॉपी करके और फिर उन्हें कॉपी करके वापस नहीं कर सकते क्योंकि वे दूषित हो जाते हैं, आपको इसके बजाय mysqldump का उपयोग करना होगा।

इसलिए यदि आप डेटाबेस में / var / lib / mysql, यानी / var / lib / mysql / myDB / में डेटाबेस के लिए जाते हैं और कुछ फाइलों के साथ गड़बड़ करते हैं, जो इसे करना चाहिए :-)

इसलिए मैं किसी एक फाइल को कॉपी करने की सलाह दूंगा, एक हेक्स एडिटर के साथ थोड़ी एडिटिंग करके और उसे कॉपी करके।


8
cat DB1.myd /dev/random > DB2.myd

मैं यह पसंद है!
काइल ब्रान्ड

1
जब तक मेरी हार्डडिस्क भर जाती है, तब तक / देव / यादृच्छिक से डेटा नहीं खींचते रहेंगे? : पी
रोरी

2
अरे, आपने भ्रष्ट कहा, है ना? ;-)
मैट सिमंस

रोरी, हां, लेकिन बस कुछ बिंदु पर Ctrl-C मारा
काइल ब्रांट

रोरी, या एक फ़ाइल के लिए सिर / देव / उर्जाप्रती का उपयोग करें, और फिर उन बिल्ली
काइल ब्रांट



2

मेरा सुझाव है कि गलती का अनुकरण करने के लिए एक अधिक यथार्थवादी तरीका यह होगा कि वह MySQL के पैरों के नीचे से गलीचा खींच सके, जबकि यह एक गहन अपडेट कर रहा है। mysqldप्रक्रिया के लिए SIGKILL जारी करना पर्याप्त होना चाहिए। संभावना है कि जब आप MySQL को पुनः आरंभ करेंगे तो प्रश्न में तालिका दुर्घटनाग्रस्त हो जाएगी।

वैकल्पिक रूप से मैं अन्य लोगों के सुझावों को लागू करने का सुझाव .MYIदूंगा लेकिन डेटा फ़ाइल के बजाय indec फ़ाइल में।


2

उदाहरण:

mysql> repair table Transactions;
^CQuery aborted by Ctrl+C
+-----------------------------------+--------+----------+-----------------------+
| Table                             | Op     | Msg_type | Msg_text              |
+-----------------------------------+--------+----------+-----------------------+
| test.Transactions | repair | error    | 137 when fixing table |
| test.Transactions | repair | status   | Operation failed      |
+-----------------------------------+--------+----------+-----------------------+
2 rows in set (17.84 sec)

mysql> select * from Transactions limit 1;
ERROR 144 (HY000): Table './test/Transactions' is marked as crashed and last (automatic?) repair failed

1

शायद एक कमांड निष्पादन जो निम्नलिखित की तरह कुछ करता है:

echo "aaa" > file.myd
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.