繁体   English   中英

在 shell 脚本中使用 mysql_config_editor

[英]Using mysql_config_editor within shell script

我无法理解为什么此行在命令行中有效:

mysql --login-path=local

我按预期得到了典型的mysql> _提示符。

但是,当我在 shell 脚本中使用以下内容时:

#!/bin/bash
mysql --login-path=local -e "SELECT contractor FROM contractor" | while read contractor; do
    echo "Contractor: $contractor"
done

这是我尝试运行该小脚本时发生的情况:

zak@yserver:$ sh contractors.sh
错误 1045 (28000):用户 'zak'@'localhost' 的访问被拒绝(使用密码:NO)

问题是,当我设置local时,我使用了root用户(我知道这是个坏主意——但这只是概念验证而不是生产),如下所示:

mysql_config_editor set --login-path=local --host=localhost --user=root --password

从我读到的内容来看,我正在正确使用它——它在命令行上工作。只是不在我的 shell 脚本中——我的语法有问题吗?

经过深思熟虑——我无法理解为什么 1) 它使用zak用户名——以及 2) 它使用 PASSWORD NO当我明确地将用户名设置为root并在提示符下输入密码时。

更新

如果我使用bash而不是sh ,它也会失败——IE

zak@yserver:$ bash contractors.sh
错误 1045 (28000):用户 'zak'@'localhost' 的访问被拒绝(使用密码:NO)

我不确定为什么它在命令行上对您有用,但是mysql_config_editor凭据存储在系统用户的home目录中。

所以如果你运行:

mysql_config_editor set --login-path=local --host=localhost --user=root --password

...作为用户zak ,那么.mylogin.cnf凭据文件将存储在/home/zak/中,并且应该将权限设置为仅允许zak访问它。

如果您没有将任何用户名或密码传递给mysql ,那么它会使用您的系统user ,这会解释您的错误消息(`Access denied for user 'zak'@'localhost')。

如果您将凭据设置为root ,那么它们将保存在/root中。 您可以将它们复制到/home/zak/ ,将权限更改为600并将所有权更改为zak:zak然后它们也应该适用于您的用户。

或者你可以只运行mysql_config_editor命令作为zak

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM