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 中几乎不相关的模糊部分发现这一点的,所以我不会因为错过它而责怪每个人。
我有一个奇怪的问题。我在 RHEL 上有 MySql 运行ning。我可以使用
登录到 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): 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 中几乎不相关的模糊部分发现这一点的,所以我不会因为错过它而责怪每个人。