Çalışan bir MySQL sorgusunu nasıl durdurabilirim?


258

mysqlLinux kabuğumdan bağlanıyorum . Arada sırada SELECTçok büyük bir sorgu çalıştırıyorum . Yazdırıyor ve yazdırıyor ve zaten bunun demek istediğim olmadığını biliyorum. Sorguyu durdurmak istiyorum.

Vurmak Ctrl+C(birkaç kez) mysqltamamen öldürür ve beni tekrar kabuğa götürür, bu yüzden yeniden bağlanmak zorundayım.

Bir sorguyu mysqlkendisini öldürmeden durdurmak mümkün müdür ?


1
MySQL 5.7'nin sunucu tarafı SELECT deyimi zaman aşımını desteklediğini belirtmek gerekir. Bununla
Morgan Tocker

Yanıtlar:


462
mysql>show processlist;

mysql> kill "number from first col";

1
Teşekkürler, sadece phpmyadmin'de nasıl yapılacağını biliyordum!
Zilverdistel

5
ama mysqlyazdırıyor ... İstemi göremiyorum
David B

34
Bu temel yaklaşıma katılıyorum, ancak bence bu durum için KILL QUERYkullanımı biraz tercih edilir KILL. Bu şekilde sorgu öldürülür, ancak bağlantı kesilmez.
Ike Walker

3
işlem listeniz arabelleğinizin üzerinde ilerliyorsa, çağrı cihazını ayarlamak yararlı bir ipucudur. Komut istemine '\ P more' yazmanız yeterlidir. Bu ipucuna daha buraya bakınız dbasquare.com/2012/03/28/...
Scott

1
AWS RDS'de MySQL kullanıyorsanız, çalıştırma izniniz olmayacak KILL, ancak şunları çalıştırabilirsiniz:CALL mysql.rds_kill(12345)
Kip

70

Sadece eklemek için

KILL QUERY **Id** burada id bağlantı kimliği show processlist

genellikle bazı uygulamalardan çalışırken bağlantıyı kesmek istemiyorsanız daha fazla tercih edilir.

Daha fazla bilgi için burada mysql doc okuyabilirsiniz


Bununla ilgili olduğum bir soru, bağlantı yeniden doğdu mu yoksa bağlantıların öldürülmesi sonunda havuzun uygulamanın çalışması için çok küçük olmasına neden oluyor mu?
Iroh Amca

48

Mysql ile iletişime geç

mysql -uusername -p  -hhostname

tam işlem listesini göster:

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

Belirli sorguyu öldür. Burada id = 9255451

mysql> kill 9255451;

İzin reddedilirse, şu SQL'i deneyin:

CALL mysql.rds_kill(9255451)

13
Not: AWS RDS örneği kullanılıyorsa, bu son sorgu gereklidir.
Kip

13

Kullanım mysqladminkaçak sorgu öldürmek:

Aşağıdaki komutları çalıştırın:

mysqladmin -uusername -ppassword pr

Ardından işlem kimliğini not edin.

mysqladmin -uusername -ppassword kill pid

Kaçak sorgu artık kaynakları tüketmemelidir.


9

Varsa mysqladmin, aşağıdakilerle sorgu listesini alabilirsiniz:

> 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 |
+-----+------+-----------------+--------+---------+------+--------------+------------------+

Sonra uzun süren sorguyu barındıran mysql işlemini durdurabilirsiniz:

> mysqladmin -uUSERNAME -pPASSWORD kill 137

6

İşlemi öldürmek için aşağıdaki komutu çalıştırmanız gerekir.

> show processlist;  
> kill query processId;

Query parametresi, sorgu komutu işlemini sonlandırmamız gerektiğini belirtir.

Kill işlemi için sözdizimi aşağıdaki gibidir

KILL [BAĞLANTI | QUERY] processlist_id

Daha fazla bilgi için lütfen bu bağlantıya bakın .


1

Bu sorunun yazarı, genellikle yalnızca MySQL çıktısını yazdırdıktan sonra yanlış sorgunun yürütüldüğünün farkında olduğunu belirtmektedir. Belirtildiği gibi, bu durumda, Ctrl-Cyardımcı olmaz. Ancak, herhangi bir çıktı yazdırılmadan önce yakalarsanız , geçerli sorguyu iptal edeceğini fark ettim . Örneğin:

mysql> select * from jos_users, jos_comprofiler;

MySQL, yukarıdaki iki tablonun Kartezyen Ürününü oluşturmakla meşgul olur ve kısa süre sonra MySQL'in ekrana herhangi bir çıktı yazdırmadığını (işlem durumu Veri gönderme olduğunu ) fark edersiniz Ctrl-C:

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

Ctrl-Cbenzer şekilde bir UPDATEsorguyu durdurmak için kullanılabilir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.