我刚安装了一个带有MySQL 5.6.19的Ubuntu 14.04的全新安装。完成安装后,我执行了mysql_secure_installation
,它引导我完成了一些安全设置并让我设置了root密码。我的root密码目前包含@和$符号。当我尝试执行
mysql -u root -pAP@$$Here
我收到以下错误
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
为什么我收到此错误?
如果我再次在命令行上运行mysql_secure_installation
并通过删除@和$符号来更改root密码,我可以在运行时正常连接
mysql -u root -pAPassHere
在相关但又单独的问题上,我还尝试通过发出命令进行连接:
mysql -u root
我原本希望提示输入密码,但我收到了以下相关错误
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
为什么我没有被要求输入密码?
答案 0 :(得分:3)
请注意,某些符号(如$
)在shell中具有特殊含义,并且在将字符串传递给程序之前,shell会将变量扩展为其值。
例如,试试这个:
$ echo AP@$$Here
AP@6282Here
将$$
替换为运行此命令的bash shell的进程ID。如果要抑制变量扩展,请将字符串放在单引号中:
$ echo 'AP@$$Here'
AP@$$Here
这也适用于MySQL客户端:
$ mysql -u root -p'AP@$$Here'
请注意,-p
与引用密码之间仍然没有空格。
您还可以使用-p
以下没有字符串的方式让MySQL客户端以交互方式提示您:
$ mysql -p
Enter password:
最后,您可以方便地在$ HOME / .my.cnf中输入密码,然后您就不必输入密码。这也绕过shell变量扩展,并从字面上获取配置文件中的值。
$ cat >> $HOME/.my.cnf
[client]
user = root
password = AP@$$Here
^D
答案 1 :(得分:2)
$$
解释为变量($$将返回我认为的当前进程的PID),因此您希望用以下引号括起您的密码:
mysql -uroot -p 'foo$$bar'
由密码提示(一个更安全的选项,因为它不会存储在你的shell的历史记录中)连接指定密码标志但没有值:
mysql -uroot -p
然后系统会提示您输入密码
答案 2 :(得分:0)
只有在没有任何后续操作的情况下,才会提示您输入密码。尝试使用"
包装您的用户名和密码并使用以下内容:
mysql --user=root --password="AP@$$Here"