इस लेख में हम चर्चा करेंगे कि आप अपनी MySQL क्वेरी गतिविधि की जांच करने के लिए एक साधारण बैश स्क्रिप्ट को कैसे कॉन्फ़िगर कर सकते हैं ताकि यह सुनिश्चित हो सके कि आपके सर्वर पर लंबी क्वेरी नहीं लटक रही हैं। यह स्क्रिप्ट लंबे समय से चल रही क्वेरी का सामना करने पर आपको एक नोटिस ई-मेल करने में भी सक्षम होगी।
ज्यादातर मामलों में एक MySQL डेटाबेस क्वेरी को कुछ सेकंड के भीतर निष्पादित करने में सक्षम होना चाहिए, अगर किसी कारण से इसमें उससे अधिक समय लगता है, तो लंबे समय तक चलने वाली MySQL क्वेरी उस डेटाबेस कतार का बैकअप लेने और आपके सर्वर को धीमा करने की संभावना हो सकती है। , और संभवतः अस्थिर हो रहा है।
MySQL उपयोग समस्याओं के प्रकारों के बारे में अधिक जानकारी के लिए आप अत्यधिक MySQL गतिविधि के बारे में पढ़ सकते हैं।
यह स्क्रिप्ट केवल किसी VPS या समर्पित सर्वर होस्टिंग योजना पर सेटअप की जा सकती है, जिसकी रूट एक्सेस आपके पास है।
MySQL क्वेरी मॉनिटरिंग स्क्रिप्ट बनाएं
- आपके डेटाबेस की जटिलता के आधार पर, आप कितनी वेबसाइट चलाते हैं, और आपको कितना ट्रैफ़िक मिलता है, आप किसी क्वेरी को चलाने की अनुमति देने के लिए अधिकतम समय अलग-अलग हो सकते हैं। मैं 120 सेकंड या 2 मिनट के आसपास कुछ रूढ़िवादी के साथ शुरू करने की सलाह दूंगा, और यदि आप सतर्क होने के बाद अपने सर्वर में लॉग इन कर रहे हैं और ऐसा लगता है कि यह अभी भी स्थिर चल रहा है, तो आप शायद ट्रिगर स्तर को कुछ और बढ़ा सकते हैं। संपादन शुरू करें बैश MySQL क्वेरी अलर्ट स्क्रिप्ट के लिए एक नई फ़ाइल, इस मामले में मैं vim का उपयोग करूंगा टेक्स्ट-एडिटर और MySQLMon called नामक एक नई फ़ाइल बनाना मेरे उपयोगकर्ता की होम निर्देशिका में निम्न आदेश के साथ:
vim /home/userna1/MySQLMon
फिर आप i . को हिट करना चाहेंगे सम्मिलित करें . दर्ज करने के लिए एक बार विम लोड हो जाने पर मोड और निम्न कोड दर्ज करें:
#!/bin/bash trigger=120 activeQcount=`mysql -e "show full processlist;" |
egrep -v "leechprotect|root|Time" | awk -v T=$trigger '{ if ( $6 > T ) print $0}' |
wc -l` if [ $activeQcount -gt 0 ] then echo
"=====================================================================================" >
/tmp/MySQLMon echo "= MySQLMon has found a new query running for longer than 120 seconds (2 mins)"
>> /tmp/MySQLMon echo
"=====================================================================================" >>
/tmp/MySQLMon date >> /tmp/MySQLMon echo "" >> /tmp/MySQLMon mysql -e "show full processlist;"
>> /tmp/MySQLMon echo
"=====================================================================================">>
/tmp/MySQLMon cat /tmp/MySQLMon | awk -v T=$trigger '{ if ( $6 > T ) print $0}' |
mail -s"Caught query running longer than $trigger seconds" [email protected] -- -r
"[email protected]" fi
यह कोड पहली बार में थोड़ा अटपटा लग सकता है, लेकिन इसे तोड़ना वास्तव में काफी सरल है। पहले हम एक ट्रिगर . घोषित कर रहे हैं परिवर्तनशील और उसे 120 . पर सेट करना सेकंड। फिर हम एक activeQcount . सेट कर रहे हैं मूल रूप से हमारे ट्रिगर . से अधिक लंबी क्वेरी रखने के लिए परिवर्तनीय मूल्य।हम तब एक बैश का उपयोग करते हैं अगर यह जाँचने के लिए कथन कि क्या हमारी activeQcount मान शून्य से ऊपर है, यह दर्शाता है कि हमारे सेट ट्रिगर . से अधिक लंबी क्वेरी चल रही हैं मूल्य। इसके बाद हम बस गूंजना start शुरू करते हैं /tmp/MySQLMon नामक प्लेसहोल्डर फ़ाइल में टेक्स्ट करें , फिर अंत में हम बिल्ली वह प्लेसहोल्डर फ़ाइल जो अभी पढ़ती है और फिर हम उसे पाइप करते हैं | मेल . को फ़ंक्शन के बाद हम जिस विषय का उपयोग करना चाहते हैं, प्राप्तकर्ता का पता, फिर आप — -r में प्रवेश कर सकते हैं उसके बाद वह ईमेल पता आता है जिससे आप संदेश आना चाहते हैं।
- जब आप एक ई-मेल अलर्ट प्राप्त करते हैं तो यह इस उदाहरण की तरह दिखाई देगा:
======================================================================================
MySQLMon has found a new query running for longer than 120 seconds (2 mins)
=====================================================================================
Tue Dec 4 15:07:42 EST 2012 40901 userna1_phpb1 localhost userna1_phpb1 Query 342
Sending data
INSERT INTO users (userID, name, base64_decode)
=====================================================================================
MySQLMon स्क्रिप्ट चलाने के लिए क्रॉन जॉब सेट करें
- अब आपके पास अपनी MySQL क्वेरी मॉनिटरिंग बैश स्क्रिप्ट सेटअप होनी चाहिए, इसके बाद आप इस कार्य को चलाने के लिए एक क्रॉन जॉब बनाना चाहेंगे। यदि आप क्रॉन जॉब्स से अपरिचित हैं, तो आप क्रॉन जॉब चलाने के तरीके के बारे में पढ़ सकते हैं। आप हर 5 मिनट के लिए cPanel ड्रॉप-डाउन का उपयोग कर सकते हैं, जिससे अंतिम क्रॉन जॉब ऐसा दिखना चाहिए:
*/5 * * * * bash /home/userna1/MySQLMon
अब आपको अपने MySQL प्रश्नों की निगरानी के लिए किसी भी लंबे समय तक चलने वाले प्रश्नों को पकड़ने के लिए और ई-मेल के माध्यम से आपको अलर्ट करने के लिए सफलतापूर्वक एक बैश स्क्रिप्ट सेट करनी चाहिए। आपको यह भी पता होना चाहिए कि एक निर्धारित अंतराल पर उस स्क्रिप्ट को चलाने के लिए क्रॉन जॉब को कैसे सेटअप करना है ताकि यह लगातार आपके द्वारा मैन्युअल हस्तक्षेप के बिना चल सके।