Ich möchte mehrere MySQL-Abfragen ausführen und in angegebenen Dateien speichern. Abfragen werden in einem Bash-Skript gespeichert, queries.sh
z. B.:
cat queries.sh
mysql -u <user> -p <DBname> -e "select Col1 from Table1 where Condition;" > /home/<user>/queries/Col1Table1Cond
mysql -u <user> -p <DBname> -e "select Col5 from Table2 where Condition;" > /home/<user>/queries/Col5Table2Cond
Das Ausführen des Skripts reicht nicht aus, da <user>
er bei jeder Abfrage sein Passwort eingeben muss und dies den Skriptfluss beeinträchtigt.
Antwort1
Versuche dies ;)
user="jonnDoe"
dbname="customers"
password="VerySecret"
mysql -u $user -D $dbname -p $password -e "select Col1 from Table1 where Condition;" > /home/$user/queries/Col1Table1Cond
mysql -u $user -D $dbname -p $password -e "select Col5 from Table2 where Condition;" > /home/$user/queries/Col5Table2Cond
Besser ist es, die MySQL- /etc/mysql/my.cnf
Datei mit dem darin enthaltenen Passwort zu konfigurieren, sodass Sie es nicht jedes Mal eingeben müssen:
[client]
password = your_password
Entfernen Sie in diesem späteren Fall alle passwortbezogenen Elemente aus dem vorherigen Skript.
Antwort2
Normalerweise gibt es verschiedene Möglichkeiten, dies zu erreichen.
Speichern Sie es in einer externen Datei, die nur das Passwort enthält:
$cat password.txt
Password
$cat queries.sh
mysql -u <user> -p$(cat password.txt) <rest of the command>
Speichern Sie es in einem anderen Shell-Skript:
$cat settings.sh
PASSWORD=Password
$cat queries.sh
source settings.sh
mysql -u <user> -p"$PASSWORD" <rest of the command>
Speichern Sie es in einer Umgebungsvariablen namens PASSWORD:
$cat queries.sh
mysql -u <user> -p"$PASSWORD" <rest of the command>
Siehe auchWie melde ich mich in Shell-Skripten automatisch bei MySQL an?