mysql - 如何从 shell 脚本自动登录 MySQL?

标签 mysql bash shell

我有一个带有密码的用户的 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/

相关文章:

mysql - 将 mysql varchar 列移至最新

linux - 如何将 spark-submit 的整个输出重定向到一个文件

python - 从 shell 脚本中表的最后一行中提取值

linux - 如何将下面linux文件中的hello替换为hello1,并将下一次出现的hello替换为hello 2,依此类推,直到文件末尾

未定义函数 hash_equals() 的 PHP 调用

php - 搜索邮政编码可以在线但不能离线(从本地数据库)

php - memcached 或 MongoDB 以减轻繁重的数据库调用

bash - 基于环境变量的带有 bash 条件的节点脚本

android - "adb pull"在 Bash 脚本中返回空文件

linux - 在 Linux/Unix 中将密码从文件导入 CLI 命令参数