Ich möchte den SQL-Dump nur dann komprimieren, wenn mysqldump keinen Fehler erzeugt. Ich versuche, das falsche Passwort einzugeben, aber es führt immer noch gzip durch.
mysqldump -u username -ppassword dbname |& if [ $? == 0 ]; then gzip > test.gz; else echo "error"; fi
Was ist mit meinem Befehl falsch oder gibt es eine bessere Lösung?
Akzeptierte Antwort:
Ich denke, Sie könnten |&
entfernen (Der Grund dafür ist, dass Sie weder stdout noch stderr in die nächste Bedingung leiten müssen, wenn überhaupt, können Sie einfach ';' als Befehlstrennzeichen verwenden). So etwas sollte wahrscheinlich funktionieren:
#!/bin/bash
mysqldump -u myuser -p mypasswd > mydb.dump
if [[ $? -eq 0 ]]; then
gzip mydb.dump
else
echo >&2 "DB backup failed"
exit 1
fi
Bearbeiten:Um den Erfolg von gzip zu überprüfen, können Sie Folgendes tun:
mysqldump -u myuser -p mypasswd | gzip > mydb.dump.gz && echo "success" || echo "failure"
Dies würde jedoch Erfolg melden, selbst wenn mysqldump
fehlgeschlagen, d. h. wenn die Sicherung aus den meisten Gründen fehlgeschlagen ist, außer dass gzip die Festplatte füllt.