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不匹配问题)
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;
一切回归正常使用!