bash ファイルからの MySQL クエリ

bash ファイルからの MySQL クエリ

複数の MySQL クエリを実行し、指定したファイルに保存したいと思います。クエリは bash スクリプトに保存されます。queries.sh例:

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

スクリプトを実行するだけでは不十分です。<user>クエリごとにパスワードを入力する必要があり、スクリプトのフローが損なわれます。

答え1

これを試して ;)

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

より良い方法は、/etc/mysql/my.cnfパスワードを内部に含む mysql ファイルを構成することです。この方法であれば、毎回パスワードを入力する必要はありません。

[client]
password    = your_password

後者の場合、前のスクリプトからパスワードに関連するものをすべて削除します

答え2

これを実現するには通常、いくつかの異なる方法があります。

パスワードのみを含む外部ファイルに保存します。

$cat password.txt
Password

$cat queries.sh
mysql -u <user> -p$(cat password.txt) <rest of the command>

別のシェル スクリプトに保存します。

$cat settings.sh
PASSWORD=Password

$cat queries.sh
source settings.sh
mysql -u <user> -p"$PASSWORD" <rest of the command>

PASSWORD という環境変数に保存します。

$cat queries.sh
mysql -u <user> -p"$PASSWORD" <rest of the command>

また、以下も参照してくださいシェル スクリプトで MySQL に自動ログインするにはどうすればよいでしょうか?

関連情報