【问题标题】:Using mysql_config_editor within shell script在 shell 脚本中使用 mysql_config_editor
【发布时间】:2023-03-07 10:44:01
【问题描述】:

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

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:$ shcontractors.sh
错误 1045 (28000): 用户 'zak'@'localhost' 的访问被拒绝(使用密码:否)

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

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

根据我的阅读,我正确地使用了它——它可以在命令行上运行......只是不在我的 shell 脚本中——我的语法有问题吗?

经过深思熟虑 -- 我无法理解为什么 1) 它使用的是 zak 用户名 -- 并且 2) 它使用的是密码 NO - 当我明确将用户名设置为 root 并输入密码时提示。

更新

如果我使用 bash 而不是 sh 也会失败 -- IE

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

【问题讨论】:

  • 您是否从运行交互式mysql 的同一用户处运行脚本?它在当前用户的.mylogin.cnf 文件中查找。
  • 我使用的是同一个用户 -- zak@

标签: mysql linux bash shell


【解决方案1】:

我不确定为什么它在命令行上对您有用,但 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 运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-03
    • 2010-11-16
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    • 2011-07-07
    相关资源
    最近更新 更多