यदि आप बाइनरी लॉग के साथ चल रहे हैं तो यह अपेक्षाकृत उच्च विश्वसनीयता के साथ जांचा जा सकता है।
सबसे पहले, यह देखने के लिए कि क्या बाइनरी लॉग वास्तव में सक्षम हैं, चलाएं:
SHOW BINARY LOGS;
यदि वे सक्षम हैं, तो आपको इस तरह एक आउटपुट मिलना चाहिए:
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000244 | 15462544 |
| mysql-bin.000245 | 102622775 |
+------------------+-----------+
अन्यथा आपको एक त्रुटि संदेश मिलेगा।
अब, यदि बाइनरी लॉग्स सक्षम हैं, तो किसी भी सफल कमेंट को बाइनरी लॉग भी लिखा जाता है। मैं कहता हूं "प्रतिबद्ध", लेकिन सत्य कोई भी सफल संचालन है, यहां तक कि MyISAM जैसी गैर-लेन-देन तालिकाओं पर भी लिखा जाता है। लेकिन, ईमानदार होने के लिए, आपके प्रश्नों के परिणाम के बारे में कोई निश्चितता रखने के लिए, मैं आपके लिए उम्मीद करता हूं कि आप एक ट्रांसेक्शनल इंजन का उपयोग कर रहे हैं जैसे कि InnoDB, या फिर आप कुछ भी सुनिश्चित नहीं कर सकते।
ठीक है, इसलिए अब मान लें कि आपके पास बाइनरी लॉग ऑन हैं, और यह कि आपकी टेबल ट्रांजेक्शनल हैं (उम्मीद है कि InnoDB), तो आपके प्रश्नों का एक सफल समापन बाइनरी लॉग में लिखे जाने की उम्मीद है।
अब आपको प्रासंगिक बाइनरी लॉग का शिकार करना होगा और वहां क्वेरी की तलाश करनी होगी। यदि आप क्वेरी पाते हैं - अच्छा! यदि नहीं - यह सबसे शायद नहीं है। मैं जल्द ही समझाता हूँ।
किस बाइनरी लॉग में आपकी क्वेरी है? बाइनरी लॉग फ़ाइलों को स्वयं देखें, आमतौर पर आपकी डेटा निर्देशिका में। उनके टाइमस्टैम्प के लिए देखो। जब शक्ति बढ़ी, तो एक नया बाइनरी लॉग बनाया गया था। इसे खोजें। आपके प्रश्न शायद बाइनरी लॉग वन में सबसे पहले हैं । यह एक अनुमान है। यह उससे पहले भी एक हो सकता है, आदि लेकिन यह एक अच्छा अनुमान है।
अब, mysqlbinlogउपयोगिता का उपयोग , कमांड लाइन से निष्पादित, कुछ इस तरह से:
mysqlbinlog mysql-bin.000245
उस फ़ाइल का नाम बदलें, जिसमें आपको संदेह है कि वह क्वेरी है।
यह इस बाइनरी लॉग फ़ाइल में सभी प्रश्नों को मानक आउटपुट में आउटपुट करेगा। यूनिक्स पर, grepअपनी क्वेरी खोजने के लिए उपयोग करें:
mysqlbinlog mysql-bin.000245 | grep "something which identifies the query"
विंडोज पर, शुभकामनाएँ। नोटपैड ++ या कुछ और के साथ खोलें और मैन्युअल रूप से खोजें।
वहाँ क्वेरी है? महान - आप जानते हैं कि यह प्रतिबद्ध है।
क्या क्वेरी नहीं है? sync_binlogपरम पर जांच की जरूरत है । यह 1 है ? फिर बाइनरी लॉग में क्वेरी नहीं ==> क्वेरी प्रतिबद्ध नहीं है। लेकिन अगर 1sync_binlog नहीं है , तब भी एक मौका हो सकता है कि क्वेरी अभी तक बाइनरी लॉग में नहीं की गई है, क्योंकि बाइनरी लॉग डिस्क में फ्लश होने के ठीक पहले और बाद में क्रैश हो सकता है । आपको फिर अन्य साधनों पर वापस जाने की आवश्यकता है।commit
वे जा रहे हैं: (और उम्मीद है, फिर से, आप InnoDB का उपयोग कर रहे हैं): एक एकल पंक्ति की तलाश करें जो क्वेरी के परिणाम की पहचान कर सकती है। InnoDB के साथ आपको "सभी या कुछ भी नहीं" मिलता है। यदि आप क्वेरी से प्रभावित किसी एक पंक्ति के बारे में निश्चित हो सकते हैं - तो आप सुनिश्चित कर सकते हैं कि क्वेरी पूरी हो गई है।
संपादित करें: बेशक, यदि धीमी लॉग सक्षम है, तो आप उम्मीद कर सकते हैं कि इस तरह की लंबी क्वेरी लॉग के पूरा होने के बाद भी हो सकती है ...
सौभाग्य!