Mysql 从 bash 文件中查询

Mysql 从 bash 文件中查询

我想运行多个 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

更好的做法是在 mysql/etc/mysql/my.cnf文件中配置密码,这样就不需要每次都输入:

[client]
password    = your_password

在后一种情况下,从之前的脚本中删除所有与密码相关的内容

答案2

通常有几种不同的方法可以实现这一目标。

将其存储在仅包含密码的外部文件中:

$cat password.txt
Password

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

将其存储在另一个 shell 脚本中:

$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>

另请参阅如何在shell脚本中自动登录mysql?

相关内容