Mysql-Abfragen aus einer Bash-Datei

Mysql-Abfragen aus einer Bash-Datei

Ich möchte mehrere MySQL-Abfragen ausführen und in angegebenen Dateien speichern. Abfragen werden in einem Bash-Skript gespeichert, queries.shz. 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.cnfDatei 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?

verwandte Informationen