2009-01-31 16 views
24

Al depurar las sentencias SQL, si ejecuto accidentalmente una consulta utilizando la línea de comandos mysql que genera muchos resultados (incluso si la consulta misma se ejecuta en un tiempo razonable), la única forma que conozco de detener la secuencia interminable de salida es CTRL-C.¿Cómo interrumpo una consulta larga en la herramienta de línea de comandos mysql sin salir de mysql?

Desafortunadamente, esto me vuelve a poner en el caparazón, lo que me obliga a iniciar sesión y seleccionar la base de datos de nuevo.

Para evitar esto, he comenzado a ejecutar mysql con la opción --sigint-ignore para que CTRL-C se ignore.

Ahora me gustaría una forma de interrumpir el resultado de esas largas consultas.

¿Hay un atajo de teclado que hará esto?

+2

Presione CTRL + C y continúe procesando CTRL. La consulta fue asesinada por mí .... :) Ubuntu 12.04 –

+2

@ManishVerma, ¿Qué? ¿Cómo se supone que eso funcione? – Pacerier

Respuesta

17

Puede usar --pager para pasar su salida a un buscapersonas como less que le dará control sobre la salida. No solo lo mata, sino que también busca, busca e incluso almacena la salida mejor de lo que te da la ventana de tu terminal.

También existe la --safe-updates o -U interruptor aka --i-am-a-dummy que le protege de clauseless update s y s delete y también limita AUTO selecciona a 1000 (modifyable con select_limit).

Todo esto se puede establecer por defecto en ~/.my.cnf.

[mysql] 
pager 
safe-updates 
18

No es un atajo de teclado.

La única opción es abrir otra sesión, use SHOW PROCESSLIST y luego KILL QUERY la que desea finalizar.

También puede usar la herramienta de línea de comandos mysqladmin para emitir estos comandos.

De cualquier manera, requiere que inicie sesión. Por lo tanto, no es una gran ventaja sobre presionar Ctrl-C.

10

De la documentación de MySQL en uso:

partir de MySQL 5.1.10, tecleando Control-C hace que MySQL intento de matar al estado de cuenta actual . Si esto no puede ser hecho, o Control-C se escribe de nuevo antes de que se elimine la instrucción, sale mysql . Previamente, Control-C causó que mysql salga en todos los casos.

Dado que estaba usando la versión 5.0.67 parece que la actualización de mysql sería la mejor solución. Sin embargo, he aceptado la respuesta de Schwern porque fue rápida de implementar y funciona como un sueño.

4

Un poco tarde, pero tal vez mi respuesta ayude a alguien.

Una manera de matar a una consulta mysql hormigón a través de la línea de comandos es:

  1. identificar el ID proceso de esa consulta por el comando: mysqladmin processlist
  2. Suponiendo que el ID es el 5736748, para matar la consulta que tiene que escribir: mysqladmin matar 5736748
2

uso mysql --sigint-ignore

y para borrar una línea, utilice control + U

+0

Esta pregunta no se trata de borrar una declaración de SQL larga en el aviso, sino de abortar una operación de SQL que se ha ejecutado, que está ocupando mucho tiempo. Dicho esto, Ctrl-U es un gran atajo para conocer en general en el mundo de Unix. – mwfearnley

Cuestiones relacionadas