2009-01-31 4 views
24

Lors du débogage des instructions SQL, si j'exécute accidentellement une requête en utilisant la ligne de commande mysql qui affiche beaucoup de résultats (même si la requête elle-même s'exécute dans un délai raisonnable), la seule façon d'arrêter le flux sans fin est CTRL-C.Comment Interrompre une longue requête dans l'outil de ligne de commande mysql sans quitter mysql?

Malheureusement, cela me remet dans le shell, me forçant à me connecter et à sélectionner à nouveau la base de données.

Pour éviter cela, j'ai lancé mysql avec l'option --sigint-ignore afin que CTRL-C soit ignoré.

Maintenant, je voudrais un moyen d'interrompre la sortie de ces longues requêtes.

Existe-t-il un raccourci clavier pour cela?

+2

Appuyez sur CTRL + C et maintenez sur CTRL de traitement. Requête a été tué pour moi .... :) Ubuntu 12.04 –

+2

@ManishVerma, Quoi? Comment cela est-il supposé fonctionner? – Pacerier

Répondre

17

Vous pouvez utiliser --pager pour que votre sortie soit transmise à un pager tel que less qui vous permettra de contrôler la sortie. Non seulement le tuer, mais aussi paginer, chercher et même stocker la sortie mieux que votre fenêtre de terminal vous donne.

Il y a aussi le --safe-updates ou -U commutateur aka --i-am-a-dummy qui vous protège des clauseless update s et delete s et limite également auto sélectionne à 1000 (modifyable avec select_limit).

Tout cela peut être défini par défaut dans ~/.my.cnf.

[mysql] 
pager 
safe-updates 
18

Ce n'est pas un raccourci clavier.

Le seul choix est d'ouvrir une autre session, utilisez SHOW PROCESSLIST puis KILL QUERY celui que vous voulez terminer.

Vous pouvez également utiliser l'outil de ligne de commande mysqladmin pour exécuter ces commandes.

Dans tous les cas, vous devez vous connecter. Ce n'est donc pas vraiment un avantage par rapport à Ctrl-C.

10

A partir de la documentation actuelle de MySQL:

MySQL 5.1.10, en tapant Ctrl-C provoque mysql pour tenter de tuer le instruction en cours. Si cela ne peut pas être fait, ou Control-C est à nouveau tapé avant que l'instruction ne soit supprimée, mysql se termine. Auparavant, Control-C faisait sortir mysql dans tous les cas.

Depuis que j'utilise la version 5.0.67 semble que la mise à jour de mysql serait la meilleure solution. Cependant, j'ai accepté la réponse de Schwern car elle était rapide à mettre en œuvre et fonctionne comme un rêve.

4

Bit en retard, mais peut-être ma réponse aidera quelqu'un.

un moyen de tuer une requête mysql de béton à travers la ligne de commande est la suivante:

  1. Identifier le numéro de processus de cette requête par la commande: mysqladmin processlist
  2. En supposant que l'ID est le 5736748, pour tuer la requête que vous devez taper: mysqladmin tuer 5736748
2

utilisez mysql --sigint-ignore

et pour effacer une ligne, utilisez contrôle + U

+0

Cette question ne concerne pas la suppression d'une instruction SQL longue à l'invite, mais l'annulation d'une opération SQL qui a été exécutée, ce qui prend beaucoup de temps. Cela dit, Ctrl-U est un raccourci génial à connaître en général dans le monde Unix. – mwfearnley

Questions connexes