सबसे पहले आपको इस क्वेरी को चलाने की आवश्यकता है:
SELECT user,host FROM mysql.user
WHERE super_priv='Y' AND
CONCAT(user,'@',host) <> 'root@localhost';
यह उन सभी उपयोगकर्ताओं को सूचीबद्ध करेगा जिनके पास सुपर विशेषाधिकार है । अधिकांश उपयोगकर्ता जो एप्लिकेशन-संबंधित डीबी प्रसंस्करण करते हैं, उन्हें इस विशेषाधिकार की आवश्यकता नहीं होती है। MySQL प्रलेखन के अनुसार , सुपर विशेषाधिकार वाले लोग निम्नलिखित कार्य कर सकते हैं:
- प्रतिकृति निर्देशांक को नियंत्रित करने के लिए CHANGE मास्टर चलाएँ
mysqladmin kill
अन्य खातों से संबंधित धागे को मारने या मारने के लिए
- बाइनरी लॉग्स को व्यवस्थित रूप से हटाने के लिए PURGE BINARY LOGS
- वैश्विक सिस्टम चर को संशोधित करने के लिए सेट ग्लोबल का उपयोग करके कॉन्फ़िगरेशन परिवर्तन करें
- mysqladmin डीबग कमांड
- लॉगिंग को सक्षम या अक्षम करना
- अद्यतन करना भले ही * read_only * सिस्टम चर सक्षम हो
- दास सर्वर पर प्रतिकृति शुरू करना और रोकना
- संग्रहीत कार्यक्रमों और विचारों के DEFINER विशेषता में किसी भी खाते की विशिष्टता
- यहाँ आपके PROBLEM के लिए सबसे महत्वपूर्ण एक है:: यदि आप कनेक्शन सीमा को अधिकतम_कनेक्ट सिस्टम चर द्वारा नियंत्रित किया जाता है, तो भी (एक बार) कनेक्ट करने के लिए आपको सक्षम करता है।
आपको रूट @ लोकलहोस्ट के रूप में लॉगिन करना होगा और सुपर विशेषाधिकार को इस प्रकार बदलना होगा:
UPDATE mysql.user SET super_priv='N'
WHERE super_priv='Y' AND
CONCAT(user,'@',host) <> 'root@localhost';
FLUSH PRIVILEGES;
एक बार ऐसा करने के बाद, जब भी सभी उपयोगकर्ता mysql कनेक्शन को भरते हैं, केवल root@localhost
लॉगिन कर सकते हैं। सब के बाद, अगर हर कोई और उसकी दादी का सुपर विशेषाधिकार था, तो यह root@localhost
कभी भी हर किसी के आगे जुड़ने से रोक देगा। यदि max_connections 200 पर है और आपको mysqld को पुनरारंभ किए बिना इसे 300 तक बढ़ाने की आवश्यकता है, तो आप गतिशील रूप से इस आदेश के साथ max_connections बढ़ा सकते हैं :
mysql> SET GLOBAL max_connections = 300;
यह अधिक कनेक्शनों को तुरंत प्रभावी बनाने की अनुमति देगा, लेकिन केवल मनमाने ढंग से संख्या को बढ़ाएँ नहीं। आपको यह सुनिश्चित करना होगा कि वृद्धि को समायोजित करने के लिए mysql के पास पर्याप्त रैम है।
गुफा: यदि आप डायनामिक रूप से अधिकतम 300 तक बदलते हैं, तो कृपया इसे /etc/my.cnf में डालें
[mysqld]
max_connections=300
आप अपने MySQL DB सर्वर पर mysqltuner.pl चला सकते हैं। यदि आपके पास यह नहीं है, तो निम्न कार्य करें:
cd
wget mysqltuner.pl
perl mysqltuner.pl
प्रदर्शन मेट्रिक्स के तहत तीसरी पंक्ति में यह है
-------- Performance Metrics -------------------------------------------------
[--] Up for: 8d 20h 46m 22s (8M q [10.711 qps], 129K conn, TX: 90B, RX: 19B)
[--] Reads / Writes: 4% / 96%
[--] Total buffers: 2.1G global + 5.4M per thread (2000 max threads)
[OK] Maximum possible memory usage: 12.6G (80% of installed RAM)
5.4M प्रति थ्रेड देखें? यह max_connections द्वारा गुणा किया जाता है। इस उदाहरण में, यह लगभग 10.8G RAM होगा। इसलिए, हर बार जब आप अधिकतम_कनेक्ट करते हैं, तो आपको mysqltuner.pl चलाना चाहिए और जांचें कि क्या आप बहुत अधिक मेमोरी के लिए ओएस दबा रहे हैं।
किसी भी स्थिति में, जिनके पास SUPER विशेषाधिकार हैं, ऐसे उपयोगकर्ताओं को डीबी कनेक्शंस के साथ बाढ़ की स्थिति को कम करने का अवसर देते हैं।