MySQL修改密码后无法进入问题ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor)

MySQL之前无密码,使用

UPDATE mysql.user SET authentication_string=’xxxx’ WHERE user=’root’ and host=’localhost’;

修改增加密码后登入一直报错, root以及密码确定是正确,却怎么也无法从本地登录MySQL,提示
ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES);

网上查找原因:mysql库中的user表缺少一个root指向host:localhost的数据项,只有一个root指向host:主机名的数据项,故怎么也无法利用root账户登录MySQL。

但是按照方法关闭MySQL进程然后在启动mysql的参数中加入 –skip-grant-tables来无密码登入,MySQL却无法启动;去除该参数后服务正常启动。而CMD控制台跳转到mysql的bin目录下,再输入mysqld –skip-grant-tables ,依然无效。此时密码登入失败,无密码登入失效。

多方查找后发现:

在MySQL 8.04前,执行:SET PASSWORD=PASSWORD(‘[新密码]’);但是MySQL8.0.4开始,这样默认是不行的。因为之前,MySQL的密码认证插件是“mysql_native_password”,而现在使用的是“caching_sha2_password”。

发现是由于版本原因导致:
在MySQL8版本下:
1. mysqld –console –skip-grant-tables –shared-memory 可以无密码启动服务
2. 然后另开窗口:mysql.exe -u root 登入
3. 进入mysql数据库:(可以证明并非user和host不匹配问题)
MySQL修改密码后无法进入问题ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor)_第1张图片
4. 将密码置空:

UPDATE mysql.user SET authentication_string=” WHERE user=’root’ and host=’localhost’;

5.操作完成后退出重新登录(无需密码);

MySQL8正确修改密码语法:

进入数据库:use mysql;
修改密码:ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘新密码’;
刷新权限: FLUSH PRIVILEGES;

一切回归正常使用!

你可能感兴趣的:(MySQL)