मुझे MySQL से दिए गए उपयोगकर्ता नाम के साथ सभी क्लाइंट को डिस्कनेक्ट करने के लिए एक कुशल तरीका चाहिए। मैंने उपयोगकर्ताओं के पासवर्ड को बदलने के बारे में सोचा था, लेकिन मुझे लगता है कि कनेक्शन की जांच होने पर ही इसकी जाँच की जाती है।
विचार?
मुझे MySQL से दिए गए उपयोगकर्ता नाम के साथ सभी क्लाइंट को डिस्कनेक्ट करने के लिए एक कुशल तरीका चाहिए। मैंने उपयोगकर्ताओं के पासवर्ड को बदलने के बारे में सोचा था, लेकिन मुझे लगता है कि कनेक्शन की जांच होने पर ही इसकी जाँच की जाती है।
विचार?
जवाबों:
आप नीचे "SQL से SQL" विधि का उपयोग कर सकते हैं (बस जरूरत के अनुसार mysql क्लाइंट को अतिरिक्त कनेक्शन विकल्पों में पास करें):
shell> mysql -NBe "SELECT CONCAT('KILL ', id, ';') FROM information_schema.processlist WHERE user = 'some_username';" | mysql -vv
नोट: यह MySQL 5.1 और 5.5 के साथ काम करता है। पुराने MySQL संस्करणों के लिए इसे अलग तरीके से लागू किया जाना चाहिए क्योंकि सूचना_समेय में प्रक्रिया सूची तालिका नहीं है।
उपयोग किए गए विकल्प:
-N means that you do not want to get column names back.
-B puts it into batch mode, so that you do not get MySQL's table layout.
-e executes the following statement.
-v controls the verbosity, could be used up to three times.
यह कैसे काम करता है इसका स्पष्टीकरण:
आईडी के साथ सबसे पहले KILL स्टेटमेंट जेनरेट किए जाते हैं।
shell> mysql -NBe "SELECT CONCAT('KILL ', id, ';') FROM information_schema.processlist WHERE user = 'some_username';"
नमूना उत्पादन:
KILL 1061;
KILL 1059;
KILL 1057;
फिर उन बयानों को अंजाम दिया जाता है।
shell> mysql -NBe "SELECT CONCAT('KILL ', id, ';') FROM information_schema.processlist WHERE user = 'some_username';" | mysql -vv
नमूना उत्पादन:
--------------
KILL 1061
--------------
Query OK, 0 rows affected
--------------
KILL 1059
--------------
Query OK, 0 rows affected
--------------
KILL 1057
--------------
Query OK, 0 rows affected
लाइनक्स पर आप ऐसा कुछ उपयोग कर सकते हैं।
मेरा दृष्टिकोण बहुत सरल है। पहले चरण में हम अपने डेटाबेस में 'शो प्रोसेसलिस्ट' भेजते हैं। परिणाम सभी जुड़े उपयोगकर्ताओं के साथ एक सूची है। अगले चरण में हम उपयोगकर्ता नाम को फ़िल्टर करने के लिए अच्छे पुराने grep कमांड का उपयोग करते हैं। Awk के साथ हम 'किल कमांड' उत्पन्न करते हैं। अंतिम चरण में हम सभी किल कमांड mysql को भेजते हैं। सब कुछ समेटना होगा | प्रतीक।
mysql -uroot -e 'show processlist' | grep username | awk {'print "kill "$1";"'}| mysql -uroot