MySql 1045 使用 --defaults-file 时

MySql 1045 When using --defaults-file

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

登录到 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): Access denied for user 'root'@'localhost' (using password: YES)

我运行使用sudo配置脚本,配置文件与脚本位于同一目录

我对配置文件有 0600 权限。

我该如何进行这项工作?

选项文件不适用于 auto-login 凭据。

试试这个:

export MYSQL_PWD=myPassword

并尝试使用 root 用户进行连接。


请注意,此方法是 "insecure",但您尝试执行的操作的基本思想也是如此。

如果您的目标是不在脚本或命令行中使用密码,我可以建议一种不同的方法吗?
您可以使用加密的登录凭据创建一个文件并将其用于登录。

这是一个例子:
使用

创建文件
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

它对我有用,但它有点 'tricky' 修复,实际文档中没有显示。你所要做的就是改变

[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 中几乎不相关的模糊部分发现这一点的,所以我不会因为错过它而责怪每个人。