सभी प्रश्नों को मारें - MySQL


17

कभी-कभी एक SNAFU के दौरान मुझे kill query xxxxxxxबीस या तीस बार दौड़ना पड़ता है । मुझे किसी भी प्रकार की kill allकमांड याद आ रही है?

टाइप करने के तरीके पर मुझे अच्छा नहीं लगता।


सर्वर को पुनरारंभ करें?
डेरेक डाउनी

@DTest - कि एक प्रश्न के साथ किया जा सकता है? मेरे पास डायरेक्ट सर्वर एक्सेस नहीं है।
JIStone

यह एक सवाल है जो अन्य डेवलपर्स और डीबीए (+1) के लिए काम आ सकता है !!!
रोलैंडम्यूसीडीडीबीए

जवाबों:


15

लिनक्स कमांड लाइन से

for PROC_TO_KILL in `mysql -h... -u... -p... -A --skip-column-names -e"SHOW PROCESSLIST" | grep -v "system user" | awk '{print $1}'` ; do mysql -h... -u... -p... -A --skip-column-names -e"KILL QUERY ${PROC_TO_KILL}" ; done

आप क्वेरी में किसी विशिष्ट उपयोगकर्ता या विशिष्ट स्ट्रिंग का पता लगाने के लिए लूप के शीर्ष लेख में grep विकल्प बदल सकते हैं।

यदि आपके पास MySQL 5.1 है, जहां INFORMATION_SCHEMA में प्रक्रिया सूची है, तो आप mysql क्लाइंट के भीतर से बल्क में KILL QUERY कमांड उत्पन्न करने के लिए ऐसा कर सकते हैं:

SELECT GROUP_CONCAT(CONCAT('KILL QUERY ',id,';') SEPARATOR ' ') KillQuery
FROM information_schema.processlist WHERE user<>'system user'\G

आप एक विशिष्ट क्वेरी, लंबे समय तक चलने वाले प्रश्नों के विरुद्ध TIME फ़ील्ड या किसी विशिष्ट डेटाबेस के विरुद्ध DB फ़ील्ड देखने के लिए INFO फ़ील्ड के विरुद्ध क्लॉस कर सकते हैं।


5
mysql> select concat('KILL ',id,';') from information_schema.processlist where user='root' into outfile '/tmp/a.txt';
Query OK, 2 rows affected (0.00 sec)

mysql> source /tmp/a.txt;
Query OK, 0 rows affected (0.00 sec)

http://www.mysqlperformanceblog.com/2009/05/21/mass-killing-of-mysql-connections/


मुझे वास्तव में यह दृष्टिकोण पसंद है क्योंकि यह लिनक्स या विंडोज की परवाह किए बिना mysql क्लाइंट की सीमाओं के भीतर किया जा सकता है। +1 !!!
रोलैंडमाइसीडीडीबीए
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.