Fix Control-C im MySQL-Kommandozeilenprogramm?


10

Durch mysqlDrücken von in der Befehlszeile Control-Cwird das Programm abgebrochen und Sie kehren zur Bash zurück. In psqlder für postgres wird die aktuelle Abfrage beendet und das psql-Programm nicht gestoppt. Gibt es eine Möglichkeit, das Verhalten Control-Cim psql-Stil im MySQL-Programm abzurufen? Ich finde mich immer wieder Control-Caus Gewohnheit drängen und muss mich wieder bei MySQL anmelden.

Control Ctötet Bash nicht und meldet dich ab, wenn du darauf drückst. Was ich für eine gute Sache halte. Control-Cbedeutet "hör auf, was du tust".

Antworten:


7

Wenn Sie während der Ausführung der Abfrage in 5.1 Strg-C drücken , wird die Ausführung mit der Meldung "Die Ausführung der Abfrage wurde unterbrochen" angehalten.

    mysql> INSERT INTO c SELECT rand () * 1000, sha1 (rand ()) FROM c;
    Abfrage mit Strg + C abgebrochen
    FEHLER 1317 (70100): Die Abfrageausführung wurde unterbrochen

Eine weitere Ctrl-CPresse tötet den Kunden.

Ältere Versionen sterben schrecklich wie in Frage gestellt, also Upgrade wenn möglich :)

Bearbeiten:

Sieht aus wie es in 5.0.25 (und 5.1.10) hinzugefügt wurde.


2
Es hat immer noch ziemlich dummes Verhalten. Wenn Sie während einer Abfrage STRG + C drücken, sollte die Abfrage abgebrochen werden. Wenn Sie an der Eingabeaufforderung STRG + C drücken, sollte dies nichts bewirken und MySQL NICHT beenden. Wenn Sie an der Bash-Eingabeaufforderung STRG + C drücken, wenn nichts passiert, wird zwar eine neue Zeile gedruckt, im Grunde genommen jedoch nichts.
Neil

Eigentlich wäre es mir lieber, wenn psql genau das tut: Wenn Sie auf halbem Weg eine Abfrage eingeben, vielleicht bereits mehrere Zeilen eingegeben haben und feststellen, dass Sie einen Fehler gemacht haben und die Eingabe abbrechen möchten, drücken Sie STRG + C sollte zur Eingabeaufforderung zurückkehren.
Harmic

Ich werde es klarstellen: Strg-C lässt Sie auch in Version 5.5 immer noch aus der MySQL-CLI heraus. Andys Antwort ist etwas vage (zumindest für mich), aber wenn Sie das Gefühl hatten, dass neuere Versionen dieses Verhalten behoben haben, wurden Sie in die Irre geführt.
ndemou

@ndemou Auf welcher Plattform bist du? Meine Antwort wurde auf RHEL5 getestet.
Andy

@Andy getestet auf Ubuntu 12.04. Sie schreiben "Sieht aus wie es in 5.0.25 hinzugefügt wurde". Was denkst du wurde hinzugefügt? Das ist der Teil Ihrer Antwort, den Sie nicht verstehen. Siehe auch meine Antwort unten.
ndemou

13

Wie Andy sagt, ist es in späteren Versionen behoben.

In älteren Versionen gibt es keine entsprechende Tastenkombination.

Mit dem folgenden CLI-Flag können Sie dies jedoch verhindern:

--sigint-ignore

Ignore SIGINT signals (typically the result of typing Control-C).

Der Haken ist, dass --sigint-ignore auch die Möglichkeit entfernt, lange laufende Abfragen zu stoppen. Oh! und nichts, was für die Frage relevant ist, wurde in der späteren Version (<= 5.5) AFAICT behoben. Siehe meine Antwort unten.
ndemou

5

Wenn Sie am Ende Ihrer Zeile ein \ c hinzufügen, anstatt Strg-c zu verwenden, können Sie die Zeile beenden, ohne mysql zu beenden.


3

Kurze Antwort: Ab Anfang 2014 gibt es keine Möglichkeit, das beschriebene Verhalten in MySQL zu haben. Siehe entsprechenden Fehlerbericht und eine Seite in dba.stackexchange, auf der 3 verschiedene Personen kommentieren, dass dies in Version 5.5 immer noch nicht behoben ist . Soweit ich nach einem langen Googeln feststellen kann, gibt es auch keine Problemumgehung (siehe unten, warum --sigint-ignore nicht gut ist). Andys Antwort wurde bearbeitet, um zu erwähnen, dass "Sieht so aus, als ob sie in 5.0.25 (und 5.1.10) hinzugefügt wurde." aber er wurde wahrscheinlich durch einen Kommentar mit Datum [3. Mai 2006, 19:04] im oben genannten Fehlerbericht in die Irre geführt.

Das Argument --sigint-ignore (siehe Dan Carleys Antwort) verhindert zwar, dass MySQL Sie in die Shell zurückführt, wenn Sie Strg-C drücken, entfernt jedoch auch die Möglichkeit, lange laufende Abfragen zu stoppen .

Dies ist die Art von Usability-Fehlern, die Sie dazu bringen :-( Wirklich offensichtlich und wahrscheinlich extrem einfach zu beheben, aber immer noch hier ist es nach vielen Jahren.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.