【问题标题】:MySQL Access denied from command connection来自命令连接的 MySQL 访问被拒绝
【发布时间】:2018-04-30 10:38:55
【问题描述】:

所以我正在连接到 AWS EC2 Ubuntu 16.04 实例。作为我的生产脚本的一部分,我这样做:

mysql -u root -pmy-secret -e "source resetDb.sql;" >> lastRun.log

这个resetDb.sql 具有创建和填充数据库信息的查询。然后继续使用该应用程序。

问题是mysql通过抛出这种方式拒绝我的访问

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

但是如果我连接mysql -u root -p 并手动输入密码,它会让我进入控制台,所以这让我看看密码是否正确。

我在服务器上得到这个输出

$ mysql --version mysql Ver 14.14 Distrib 5.7.20, for Linux (x86_64) using EditLine wrapper $ uname -a Linux ip-xx.xx.xx.xx 4.4.0-1038-aws #47-Ubuntu SMP Thu Sep 28 20:05:35 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

我在另一个关于刷新权限和重置 root 密码的问题中看到了,但我的密码是正确的,所以对我没有好处。

有人知道吗?这个想法是运行脚本来自动设置整个服务器。提前致谢。

【问题讨论】:

  • URL 脚本使用的是什么?

标签: mysql linux amazon-web-services ubuntu amazon-ec2


【解决方案1】:

您的密码使用的是命令外壳解释的“特殊”字符。注意密码中的这些字符:

$ & ! \ [ ] `

在 Linux 上用单引号将您的密码括起来:'my_%PATH_problem&password'。对于 Windows,请使用双引号。您还可以使用 bakslash \

转义问题字符

【讨论】:

  • 你做对了。我有'$'。用引号括起来就足够了,就像mysql -u root -p'my-$ecret' -e "select * from mysql;"。谢谢。
【解决方案2】:

尝试在密码周围使用引号? 试试这个:

mysql -u root -p"your_passord" -e "SHOW DATABASES"

你甚至可以在里面放上等号:

mysql --user="root" --password="your_passord" -e "SHOW DATABASES"

如果你想要永久的东西,似乎你可以试试this(永远不要测试它):

【讨论】:

  • 试过了,双引号不起作用,不知道为什么。但概念是对的。选择其他答案,因为它列出了特殊字符。
【解决方案3】:

另一种可能是您的 root 密码具有特定的主机限制。

所以如果你运行

select user,host,password from mysql.user;

您可能会看到 root@localhost、root@127.0.0.1 和 root@% 都存在,但密码不同。

【讨论】:

  • 试过了,root 只存在于本地主机上。幸运的是,我只在服务器(本地主机)内部使用它。
猜你喜欢
  • 2021-07-31
  • 1970-01-01
  • 1970-01-01
  • 2015-06-21
  • 2018-04-28
  • 1970-01-01
  • 2015-03-11
  • 2018-05-19
  • 2016-02-07
相关资源
最近更新 更多