问题描述:
windows系统,以管理员方式打开cmd(已配置好环境变量),输入:mysql -u root -proot123
已确保密码正确的情况下(注意指令-p后面不能加空格),仍然报错:
ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES)
问题原因:
1.可能存在匿名用户,即没有用户名的用户''
,比如''@'localhost'
和'root'@'localhost'
是等价的。
2. -p 命令前不能加空格,后面不要接分号; 正确的为:-p密码
以下均会导致错误,如 -p 密码、-p密码;
3.用户密码可能过期 (一般都不是这个问题)
解决办法:
1.解决匿名用户问题
查询用户信息:SELECT user, host FROM mysql.user;
删除匿名用户:DELETE from mysql.user where user='';
重载权限表:flush privileges;
重启mysql,问题搞定。(没搞定再考虑用户密码过期问题)
2.解决用户密码过期
修改密码:
GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY 'root123';
重载权限表:flush privileges;
重启mysql,问题搞定。
如果你此时已经无法连接上mysql,不能执行上述命令,请先配置免密登录(或使用root用户通过navicat连接mysql,执行上述操作,navicat不存在匿名用户问题)。
配置免密登录步骤(适用于5.5-5.7版本,8.0版本命令改了):
- 关闭mysql服务,以管理员方式打开cmd,输入:
mysqld -nt --skip-grant-tables
(如果报错,可能是你之前移动过data的默认路径,请自行百度解决) - 开启mysql服务,新打开一个cmd窗口,输入
mysql -u root
登录成功