我刚刚使用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)
为什么不要求我输入密码?
请注意,有些符号$
在shell中具有特殊含义,并且shell在将字符串传递给程序之前将变量扩展为它们的值。
例如,尝试以下操作:
$ echo AP@$$Here
AP@6282Here
将$$
被替换为从我跑这个命令bash外壳的进程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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句