Jak Mogę zatrzymać uruchomione zapytanie MySQL?

Podłączam się do mysql z mojej powłoki Linuksa. Co jakiś czas uruchamiam SELECT zapytanie, które jest zbyt duże. Drukuje i drukuje i już wiem, że nie o to mi chodziło. Chciałbym przerwać to zapytanie.

Uderzenie Ctrl+C (kilka razy) zabija mysql całkowicie i zabiera mnie z powrotem do shell, więc muszę się ponownie połączyć.

Czy możliwe jest zatrzymanie zapytania bez zabijania samego mysql?

Author: Eric Leschinski, 2010-09-24

6 answers

mysql>show processlist;

mysql> kill "number from first col";
 382
Author: baklarz2048,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-05 23:07:58

Wystarczy dodać

KILL QUERY **Id** gdzie Id jest identyfikatorem połączenia z show processlist

Jest bardziej korzystne, jeśli nie chcesz zabić połączenia zwykle podczas uruchamiania z jakiejś aplikacji.

Po Więcej Szczegółów możesz przeczytać mysql doc tutaj

 60
Author: mtariq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-22 12:32:22

Połącz się z mysql

mysql -uusername -p  -hhostname

Pokaż pełną listę procesów:

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

Zabij konkretne zapytanie. Tutaj id=9255451

mysql> kill 9255451;

Jeśli nie masz uprawnień, spróbuj użyć tego SQL:

CALL mysql.rds_kill(9255451)
 32
Author: minhas23,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-29 07:09:07

Użyj mysqladmin, aby zabić uciekające zapytanie:

Uruchom następujące polecenia:

mysqladmin -uusername -ppassword pr

Następnie zanotuj identyfikator procesu.

mysqladmin -uusername -ppassword kill pid

Uciekające zapytanie nie powinno już zużywać zasobów.

 11
Author: minhas23,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-28 22:07:38

Jeśli masz mysqladmin dostępne, możesz otrzymać listę zapytań z:

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

Następnie możesz zatrzymać proces mysql, który jest hostem długo działającego zapytania:

> mysqladmin -uUSERNAME -pPASSWORD kill 137
 8
Author: Rudy Lattae,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-23 15:29:20

Autor tego pytania wspomina, że zwykle dopiero po MySQL wypisuje swoje wyjście, że zdaje sobie sprawę, że złe zapytanie zostało wykonane. Jak wspomniano, w tym przypadku Ctrl-C nie pomaga. Zauważyłem jednak, że przerywa bieżące zapytanie - Jeśli złapiesz je przed każde wyjście jest drukowane. Na przykład:

mysql> select * from jos_users, jos_comprofiler;

MySQL jest zajęty generowaniem iloczynu kartezjańskiego powyższych dwóch tabel i szybko zauważysz, że MySQL nie wydrukował żadnego wyjścia na ekran (proces stan to wysyłanie danych ) więc wpisujesz Ctrl-C:

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

Ctrl-C można również użyć do zatrzymania zapytania UPDATE.

 0
Author: Anthony Geoghegan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-16 09:25:49