Wenn MySQL nicht gedruckt wird, wird die Ausgabe an das Terminal ausgewählt

7

Kurze Frage: Ich habe kommende Befehle erstellt, die meine Datenbank aufwärmen. Die Sache ist, dass diese Auswahlen groß sind. Wenn ich eine solche Auswahl mache, bekomme ich alle "Jiba-Jaba" in mein Terminalfenster. Wie können Sie MySQL dazu bringen, die Auswahl "leise" zu machen? ohne ewig zu brauchen, um den ganzen Mist in mein Terminal zu drucken?

Katafalkas
quelle

Antworten:

8

Sie können die Ausgabe eines beliebigen Befehls - nicht nur von MySQL - mithilfe der E / A-Umleitungsoperatoren Ihrer Shell umleiten. Zum Beispiel in bash:

$ mysql mydb < commands.sql > /dev/null 2>&1

Dadurch wird der MySQL-Befehlszeilenclient gestartet, mit "mydb" auf dem lokalen System verbunden (vorausgesetzt, Sie haben Zugriff), SQL-Befehle aus der Datei gelesen commands.sqlund die gesamte Ausgabe an ausgegeben /dev/null.

Wenn Sie die Ausgabe nachträglich zur Überprüfung speichern möchten, können Sie sie in eine Datei umleiten, anstatt /dev/null:

$ mysql mydb < commands.sql > output.txt 2>&1

Die 2>&1Weiterleitungen stderrsowie stdout. Wenn Sie Fehler auf Ihrem Terminal sehen möchten, leiten Sie nur Folgendes um stdout:

$ mysql mydb < commands.sql > /dev/null
Larsks
quelle
10
  1. MySQL-Client:

    mysql> pager > /dev/null
    PAGER set to '> /dev/null'
    mysql> select 1;
    1 row in set (0.00 sec)
    
    mysql> \q
    Bye
    

    Auf diese Weise wird das Ergebnis der Abfragen nicht gedruckt, sondern nur die Zeilenzählung enthält eine Zeitinformation.

  2. IO-Umleitung in der Shell

    user@host$ mysql -e 'select 1' > /dev/null
    user@host$
    
m.sr.
quelle
1

Wenn der Zweck darin besteht, den Cache aufzuwärmen, können Sie auch Folgendes tun:

Wählen Sie max (concat (col1, col2)) aus mytable, wo ...

Die Engine muss die realen Seiten lesen, um das Maximum zu berechnen (mit ohnehin geringem Overhead im Verhältnis zur E / A).

Beachten Sie, dass, wenn Sie nur Spalten aus einem Index auswählen, nur der Index rot ist, Sie nicht zur Tabelle selbst wechseln müssen ("Deckungsindex").
In einigen Fällen möchten Sie möglicherweise genau das (laden Sie nur den Index in den Cache).

phil_w
quelle
0

Das funktioniert bei Unix-Installationen von MySQL. Da Windows weder / dev / null noch einen Pager-Befehl in der MySQL-Installation hat, funktioniert es nicht unter MySQL, das unter Windows installiert ist.

Unter Windows MySQL (auch unter Unix) können Sie SELECT 1 INTO OUTFILE 'Dateiname' verwenden oder eine Variable festlegen und SELECT 1 INTO @var verwenden. Lesen Sie die Dokumentation hier: http://dev.mysql.com/doc/refman/5.0/en/select.html

Beachten Sie, dass Sie ein Outfile nicht überschreiben können, sodass INTO Outfile bei sich wiederholenden Auswahlen nicht funktioniert.

Mtherocket
quelle
Was ist los mit > NUL:?
Michael Hampton