MySql 1045使用--defaults-file

时间:2017-02-03 12:40:01

标签: mysql redhat credentials

我有一个奇怪的问题。我在RHEL上运行MySql。我可以使用

登录MySql
mysql -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

我如何使这项工作?

3 个答案:

答案 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"))
  • 详细了解mysql_config_editor here