2009-01-31 5 views
24

Beim Debuggen von SQL-Anweisungen, wenn ich versehentlich eine Abfrage mit der mysql-Befehlszeile ausführen, die viele Ergebnisse ausgibt (auch wenn die Abfrage selbst in angemessener Zeit ausgeführt wird), ist die einzige Möglichkeit, den Endlosstrom der Ausgabe zu stoppen ist CTRL-C.Wie kann ich eine lange Abfrage im mysql Kommandozeilen-Tool unterbrechen, ohne mysql zu beenden?

Leider bringt mich das in die Shell zurück und zwingt mich dazu, mich anzumelden und die Datenbank erneut auszuwählen.

Um dies zu vermeiden, habe ich begonnen, mysql mit der --sigint-ignore Option ausgeführt, so dass CTRL-C ignoriert wird.

Jetzt möchte ich eine Möglichkeit, die Ausgabe dieser langen Abfragen zu unterbrechen.

Gibt es eine Tastenkombination, die das tut?

+2

Drücken Sie STRG + C, und fahren Sie mit STRG fort. Abfrage wurde für mich getötet .... :) Ubuntu 12.04 –

+2

@ManishVerma, was? Wie soll das überhaupt funktionieren? – Pacerier

Antwort

17

Sie können --pager verwenden, um Ihre Ausgabe an einen Pager wie less zu übergeben, der Ihnen die Kontrolle über die Ausgabe gibt. Nicht nur töten, sondern auch paging, suchen und sogar speichern die Ausgabe besser als Ihr Terminal-Fenster gibt Ihnen.

Es gibt auch die --safe-updates oder -U Schalter aka --i-am-a-dummy, die Sie von clauseless update s und delete s und auch Auto Grenzen wählen bis 1000 schützen (modifizierbar mit select_limit).

All dies kann standardmäßig in ~/.my.cnf eingestellt werden.

[mysql] 
pager 
safe-updates 
18

Keine Tastenkombination.

Die einzige Möglichkeit ist, eine andere Sitzung zu öffnen, verwenden Sie SHOW PROCESSLIST und dann KILL QUERY die Sie beenden möchten.

Sie können auch das Befehlszeilentool mysqladmin verwenden, um diese Befehle auszugeben.

In beiden Fällen müssen Sie sich anmelden. Es ist also nicht von Vorteil, nur Strg-C zu drücken.

10

Aus der aktuellen MySQL-Dokumentation:

Ab MySQL 5.1.10, die Eingabe von Strg-C mysql die aktuelle Anweisung zu töten, um zu versuchen, verursacht. Wenn dies nicht getan werden kann, oder Control-C wieder vor der Aussage getötet wird, beendet mysql . Zuvor verursachte Control-C mysql in allen Fällen zu beenden.

Da ich Version 5.0.67 verwendet habe, scheint, dass die Aktualisierung von MySQL die beste Lösung wäre. Ich habe jedoch Schwerns Antwort akzeptiert, weil sie schnell umgesetzt wurde und wie ein Traum funktioniert.

4

Etwas spät, aber vielleicht hilft meine Antwort jemandem.

Ein Weg, um eine konkrete mysql Abfrage über die Befehlszeile zu töten, ist: PROCESS mysqladmin

  • Unter der Annahme, dass die ID, um die 5.736.748 ist zu töten:

    1. die Prozess-ID der Abfrage durch den Befehl identifizieren die Abfrage müssen Sie Folgendes eingeben: mysqladmin 5736748
  • 2

    verwenden mysql --sigint-ignore

    und löschen Sie eine Linie töten, verwenden Steuerung + U

    +0

    Bei dieser Frage geht es nicht darum, eine lange SQL-Anweisung an der Eingabeaufforderung zu löschen, sondern um den Abbruch einer ausgeführten SQL-Operation, die viel Zeit in Anspruch nimmt. Das heißt, Ctrl-U ist eine großartige Abkürzung, um im Allgemeinen in der Unix-Welt zu wissen. – mwfearnley

    Verwandte Themen