我有一个奇怪的问题。我在RHEL上运行MySql。我可以使用
登录MySqlmysql -uroot -pmyPassword
它工作正常。此外,当我尝试从.sh脚本执行查询时,它可以正常工作
mysql --user=root --password=myPassword --host=localhost --port=3306 -se "SELECT 1 as testConnect" 2>&1>> $OUTPUT
但是当我将用户ID和密码存储在msql.conf文件中时,如下所示
[clientroot]
user=root
password=myPassword
然后更改脚本中的行,如下所示
mysql --defaults-file=msql.conf --defaults-group-suffix=root -hlocalhost -P3306 -se "SELECT 1 as testConnect" 2>&1>> $OUTPUT
当我运行它时,我收到错误:
ERROR 1045(28000):拒绝访问用户&root;' @' localhost' (使用密码:是)
我正在使用sudo
运行脚本,配置文件与脚本位于同一目录
我在配置文件上有权限0600
。
我如何使这项工作?
答案 0 :(得分:2)
它对我有用,但实际文档中没有显示它有点“棘手”的修复。你所要做的就是改变
[clientroot]
user=root
password=myPassword
到
[clientroot]
user="root"
password="myPassword"
基本上只需添加双引号。
然后运行你的命令:
mysql --defaults-file=msql.conf --defaults-group-suffix=root -hlocalhost -P3306 -se
"SELECT 1 as testConnect" 2>&1>> $OUTPUT
应该工作(它对我有用)。
我通过查看documentation的一个不起眼的部分来发现这一点,这些部分几乎不相关,所以我不会因为错过它而责怪每个人。
答案 1 :(得分:1)
选项文件不适用于自动登录凭据。
试试这个:
export MYSQL_PWD=myPassword
尝试使用root
用户进行连接。
请注意,这种做法“不安全”,但您尝试做的事情的基本概念也是如此。
答案 2 :(得分:0)
如果您的目标是不在脚本或命令行中使用密码,我可以建议采用不同的方法吗? 您可以使用加密的登录凭据创建文件,并使用该文件进行登录。
这是一个例子:
使用
mysql_config_editor --set-login-path=local --host=localhost --user=localuser --password
这将创建文件~/.mylogin.cnf
。您现在可以使用
mysql --login-path=local
local
是您可以指定的名称,顺便说一句。
这是另一个好处:您还可以为不同的项目创建不同的文件。例如,我有时会为某些脚本创建文件。我将.mylogin.cnf
放在与脚本相同的文件夹中,并在脚本中使用它:
RESULT=($(MYSQL_TEST_LOGIN_FILE=./.mylogin.cnf mysql --login-path=$HOST -B --skip-column-names -e "SELECT whatever FROM whatever"))