我有一个带有密码的用户的 MySQL 服务器。我想在不指定密码的情况下在 shell 脚本中执行一些 SQL 查询,如下所示:
config.sh
:
MYSQL_ROOT="root"
MYSQL_PASS="password"
mysql.sh
:
source config.sh
mysql -u$MYSQL_ROOT -p$MYSQL_PASS -e "SHOW DATABASES"
如何在不指定 -p
和 -u
参数等的情况下简化整个过程以执行 SQL 查询?
最佳答案
编写这些选项的替代方法。
你可以写
mysql -u "$MYSQL_ROOT" -p"$MYSQL_PASS" -e "SHOW DATABASES"
If [password is] given, there must be no space between
--password=
or-p
and the password following it. If no password option is specified, the default is to send no password.
将空字符串作为单独的参数传递。不过,您在下面的评论表明客户仍会要求输入密码。可能它将空参数解释为数据库名称而不是密码。因此,您可以尝试以下方法:
mysql --user="$MYSQL_ROOT" --password="$MYSQL_PASS" -e "SHOW DATABASES"
.my.cnf 文件
但即使有办法,我仍然建议您改用 ~/.my.cnf
文件。命令行上的参数可能包含在 ps -A -ocmd
生成的进程列表中,因此其他用户可以看到它们。另一方面,.my.cnf
文件可以(并且应该)只能由您读取(使用 chmod 0600 ~/.my.cnf
),并且会自动使用。让该文件包含以下几行:
[client]
user=root
password=
然后一个简单的 mysql -e "SHOW DATABASES"
就足够了,因为客户端将从该文件中获取其凭据。
见 6.1.2.1. End-User Guidelines for Password Security了解您可以提供密码的各种方式,以及它们各自的优缺点。见 4.2.3.3. Using Option Files有关此 .my.cnf
文件的一般信息
关于mysql - 如何从 shell 脚本自动登录 MySQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13814413/