मैं एक चल रही MySQL क्वेरी को कैसे रोक सकता हूं?


258

मैं mysqlअपने लिनक्स शेल से कनेक्ट करता हूं। हर अब और फिर मैं एक SELECTक्वेरी चलाता हूं जो बहुत बड़ी है। यह प्रिंट और प्रिंट करता है और मुझे पहले से ही पता है कि यह मेरा मतलब नहीं है। मैं क्वेरी को रोकना चाहूंगा।

मारना Ctrl+C(एक दो बार) mysqlपूरी तरह से मारता है और मुझे वापस शेल में ले जाता है, इसलिए मुझे फिर से जोड़ना होगा।

क्या mysqlखुद को मारे बिना किसी क्वेरी को रोकना संभव है?


1
यह ध्यान देने योग्य है कि MySQL 5.7 एक सर्वर-साइड SELECT स्टेटमेंट टाइमआउट का समर्थन करता है। इस बारे में अधिक जानकारी यहाँ: mysqlserverteam.com/server-side-select-statement-timeouts
मॉर्गन Tocker

जवाबों:


462
mysql>show processlist;

mysql> kill "number from first col";

1
थैंक्स, मैं केवल यह जानता था कि इसे phpmyadmin में कैसे करना है!
Zilverdistel

5
लेकिन mysqlमुद्रण कर रहा है ... मैं शीघ्र नहीं देख सकता
डेविड बी

34
मैं इस मूल दृष्टिकोण से सहमत हूं, लेकिन मुझे लगता है कि इस मामले के लिए उपयोग KILL QUERYकरना थोड़ा बेहतर है KILL। इस तरह से क्वेरी को मार दिया जाता है, लेकिन कनेक्शन नहीं।
वाकर

3
एक उपयोगी टिप यदि आपकी प्रक्रिया सूची आपके बफर को स्क्रॉल कर रही है तो पेजर सेट करना है। बस प्रॉम्प्ट पर 'अधिक' दर्ज करें। इस टिप को और देखें यहाँ dbasquare.com/2012/03/28/…
Scott

1
यदि AWS RDS पर MySQL का उपयोग करते हैं, तो आपको चलाने की अनुमति नहीं होगी KILL, लेकिन आप चला सकते हैं:CALL mysql.rds_kill(12345)
Kip

70

बस जोड़ना है

KILL QUERY **Id** जहां आईडी से कनेक्शन आईडी है show processlist

अधिक बेहतर है यदि आप कनेक्शन को मारना नहीं चाहते हैं, तो आमतौर पर कुछ एप्लिकेशन से चलने पर।

अधिक जानकारी के लिए आप यहाँ mysql doc पढ़ सकते हैं


एक सवाल जो मैंने इससे संबंधित था, क्या कनेक्शन सिर्फ प्रतिक्रिया देता है, या क्या कनेक्शन को मारने के परिणामस्वरूप अंततः पूल का आकार बहुत छोटा हो जाता है, ताकि आवेदन चल सके?
चाचा इरोह

48

Mysql से कनेक्ट करें

mysql -uusername -p  -hhostname

पूरी प्रक्रिया सूची दिखाएं:

mysql> show full processlist;
+---------+--------+-------------------+---------+---------+------+-------+------------------+
| Id      | User   | Host              | db      | Command | Time | State | Info             |
+---------+--------+-------------------+---------+---------+------+-------+------------------+
| 9255451 | logreg | dmin001.ops:37651 | logdata | Query   |    0 | NULL  | show processlist |
+---------+--------+-------------------+---------+---------+------+-------+------------------+

विशिष्ट प्रश्न को मार डालो। यहाँ id = 9255451 है

mysql> kill 9255451;

यदि आपको अनुमति नहीं मिली है, तो इस SQL ​​को आज़माएँ:

CALL mysql.rds_kill(9255451)

13
नोट: यदि AWS RDS उदाहरण का उपयोग कर अंतिम क्वेरी आवश्यक है।
किप

13

mysqladminभगोड़ा क्वेरी को मारने के लिए उपयोग करें :

निम्न आदेश चलाएँ:

mysqladmin -uusername -ppassword pr

फिर प्रक्रिया आईडी पर ध्यान दें।

mysqladmin -uusername -ppassword kill pid

भगोड़ा क्वेरी को अब संसाधनों का उपभोग नहीं करना चाहिए।


9

यदि आपके पास mysqladminउपलब्ध है, तो आपको प्रश्नों की सूची मिल सकती है:

> mysqladmin -uUSERNAME -pPASSWORD pr

+-----+------+-----------------+--------+---------+------+--------------+------------------+
| Id  | User | Host            | db     | Command | Time | State        | Info             |
+-----+------+-----------------+--------+---------+------+--------------+------------------+
| 137 | beet | localhost:53535 | people | Query   | 292  | Sending data | DELETE FROM      |
| 145 | root | localhost:55745 |        | Query   | 0    |              | show processlist |
+-----+------+-----------------+--------+---------+------+--------------+------------------+

तब आप mysql प्रक्रिया को रोक सकते हैं जो लंबे समय से चल रहे क्वेरी की मेजबानी कर रही है:

> mysqladmin -uUSERNAME -pPASSWORD kill 137

6

प्रक्रिया को मारने के लिए आपको निम्नलिखित कमांड चलाने की आवश्यकता है।

> show processlist;  
> kill query processId;

क्वेरी पैरामीटर निर्दिष्ट करता है कि हमें क्वेरी कमांड प्रक्रिया को मारने की आवश्यकता है।

निम्नानुसार मार प्रक्रिया के लिए वाक्य रचना

KILL [संबंध | QUERY] processlist_id

कृपया उल्लेख अधिक जानकारी के लिए इस लिंक पर।


1

इस प्रश्न के लेखक का उल्लेख है कि यह आमतौर पर MySQL के उत्पादन के बाद ही पता चलता है कि उसे पता है कि गलत क्वेरी निष्पादित की गई थी। जैसा कि कहा गया है, इस मामले में, Ctrl-Cमदद नहीं करता है। हालाँकि, मैंने देखा है कि यह वर्तमान क्वेरी को रद्द कर देगा - यदि आप इसे किसी भी आउटपुट के प्रिंट होने से पहले पकड़ लेते हैं । उदाहरण के लिए:

mysql> select * from jos_users, jos_comprofiler;

MySQL उपर्युक्त दो तालिकाओं के कार्टेशियन उत्पाद को बनाने में व्यस्त हो जाता है और आप जल्द ही ध्यान देते हैं कि MySQL ने स्क्रीन पर कोई आउटपुट प्रिंट नहीं किया है (प्रक्रिया स्थिति डेटा भेज रहा है ) ताकि आप टाइप करें Ctrl-C:

Ctrl-C -- sending "KILL QUERY 113240" to server ...
Ctrl-C -- query aborted.
ERROR 1317 (70100): Query execution was interrupted

Ctrl-Cइसी तरह एक UPDATEक्वेरी को रोकने के लिए इस्तेमाल किया जा सकता है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.