web-dev-qa-db-fra.com

Comment puis-je arrêter une requête MySQL en cours d'exécution?

Je me connecte à mysql à partir de mon shell Linux. De temps en temps, je lance une requête SELECT qui est trop grosse. Il imprime et imprime et je sais déjà que ce n’est pas ce que je voulais dire. Je voudrais arrêter la requête.

Frapper Ctrl+C (plusieurs fois) tue mysql complètement et me ramène à Shell, je dois donc me reconnecter.

Est-il possible d'arrêter une requête sans tuer la mysql elle-même?

239
David B
mysql>show processlist;

mysql> kill "number from first col";
430
baklarz2048

Juste pour ajouter

KILL QUERY **Id** où Id est l'identifiant de connexion de show processlist

est plus préférable si vous ne voulez pas tuer la connexion généralement lorsque vous exécutez à partir d'une application.

Pour plus de détails, vous pouvez lire mysql doc here

67
mtariq

Connectez-vous à mysql

mysql -uusername -p  -hhostname

afficher la liste complète des processus:

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

Tuez la requête spécifique. Ici id = 9255451

mysql> kill 9255451;

Si vous obtenez l'autorisation refusée, essayez ce SQL:

CALL mysql.rds_kill(9255451)
39
minhas23

Utilisez mysqladmin pour tuer la requête qui s’emballe:

Exécutez les commandes suivantes:

mysqladmin -uusername -ppassword pr

Ensuite, notez l'identifiant du processus.

mysqladmin -uusername -ppassword kill pid

La requête d'emballement ne devrait plus consommer de ressources.

12
minhas23

Si vous avez mysqladmin disponible, vous pouvez obtenir la liste des requêtes avec:

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

Ensuite, vous pouvez arrêter le processus mysql qui héberge la requête longue:

> mysqladmin -uUSERNAME -pPASSWORD kill 137
9
Rudy Lattae

Vous devez exécuter la commande suivante pour tuer le processus.

> show processlist;  
> kill query processId;

Le paramètre Query spécifie que nous devons arrêter le processus de commande de requête.

La syntaxe pour tuer le processus comme suit

KILL [CONNEXION | QUERY] processlist_id

S'il vous plaît référez-vous ce lien pour plus d'informations.

3
Shivam Kubde

L’auteur de cette question mentionne que ce n’est généralement après l’impression par MySQL qu’il réalise que la mauvaise requête a été exécutée. Comme indiqué, dans ce cas, Ctrl-C n’aide pas. Cependant, j’ai remarqué que annulerait la requête en cours - si vous l’attrapiez avant toute sortie est imprimée. Par exemple:

mysql> select * from jos_users, jos_comprofiler;

MySQL s’emploie à générer le produit cartésien des deux tables ci-dessus et vous remarquerez bientôt que MySQL n’a imprimé aucune sortie à l’écran (l’état du processus est Envoi de données ) donc vous tapez Ctrl-C:

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

Ctrl-C peut également être utilisé pour arrêter une requête UPDATE.

0
Anthony Geoghegan