shell speichern, MySQL Abfrage Ergebnis in eine Datei
Ich habe ein script, das läuft eine MySQL-Abfrage, so etwas wie dieses:
#!/bin/sh
user="root"
pwd="test"
database="mydb"
command="long...
long... query in
multiple lines"
mysql -u $user -p$pwd << EOF
use $database;
$command
EOF
Diese Abfrage gibt ein backup von einer Tabelle zu einer anderen. Ist es möglich, speichern Sie die Abfrage-Ergebnis in eine Datei, ohne mysql zu benutzen INTO OUTFILE
? Ich will nur wissen, ob die Abfrage erfolgreich war oder fehlgeschlagen ist.
Wenn es gelang, so etwas wie 1 row(s) affected
oder wenn es nicht Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ...
Update
Lösung 1: () als eine Kette von Befehlen, so wickeln Sie Sie in einer Variablen wird das Ergebnis dieser Befehle. Dann einfach die Ausgabe der variable in eine Datei.
output=$( mysql -u $user -p$pwd << EOF
use $database;
$command
EOF
)
echo "$output" >> /events/mysql.log
Lösung 2: verwenden Sie den tee als system-Befehl zu senden das Ergebnis der Befehle in eine Datei, aber dies getan werden muss, um aus der crontab, wie diese:
*/1 * * * * root sh /events/mysql.sh |tee -a /events/mysql.log
http://forums.mysql.com/read.php?10,391070,391983#msg-391983
Meine funktionierende Lösung:
user="root"
pwd="root12345"
database="mydb"
command="long ...long query"
mysql -u $user -p$pwd << EOF >> /events/mysql.log 2>&1
use $database;
$command;
EOF
- verwenden Sie einen regulären Ausdruck für, wenn
affected
ist auf die Ausgabe. - Ist diese Nachricht nicht nur die standard-Ausgabe aus der
mysql
Befehl? Mithilfe derdone > output.log
nicht für diese Arbeit? - ja, es ist ein stantard-Ausgabe von mysql-Befehl. Wie zu verwenden Sie in diesem Fall auch gemacht?
- Sorry, nicht
done
EOF > output.log
. Verwenden Sie einfach normale shell-Ausgabe-Umleitung zu fangen, diemysql
Befehl. Verwenden> output.log 2>&1
zu fangen-Fehler-Ausgang auch.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollte dies funktionieren:
Der richtige Umgang mit Fehlermeldungen ist durch die stderr. Verwenden
2>&1
um den Fehler abzufangen.So, fügen Sie diese am Ende des scripts:
>> install.log 2>&1
kann man es auch so:
Es ist einfacher zu verwenden, die MySQL-tee-Befehl zu senden.
Um die logging-Prozess gestartet, nur mit dem tee-Befehl,
tee /tmp/mein.aus;
BEARBEITEN
Da tee ist angeblich funktioniert nicht im script, könnte man auch die log-Ausgabe mit Abschlag direkt, wenn das Skript ausgeführt.