工具:centos7+mysql8.0
步骤;
1.修改MySQL的配置,方便无密码登录
命令:vi /etc/my.cnf 在文件中加入 skip-grant-tables
;之后 重启MySQL服务systemctl start mysqld.service
就可以无密码登陆
2.无密码登陆MySQL
命令;mysql -u root
不用输入密码 enter
回车
命令:use mysql;
3.按照网络上正常流程来讲;接下来一般是“清空密码命令”
update user set authentication_string='' where user='root';
或者是“修改密码命令”
关注一下:在MySQL8.0版本中 以下 修改密码的命令已经不适用了
update mysql.user set password='newpassword' where user='root';
update mysql.user set password=PASSWORD('newpassword') where User='root';
所以大家可以用alter user 'root'@'localhost' identified by 'zhoulin1997(你自己设置的密码)'
4.下面主菜来了;
大家可能会遇到我这样的情况;无论怎么执行SQL;都会报错
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement;
我有道翻译了一下“将用户’root’@‘localhost’更改为’zhoulin1997’;
错误1290 (HY000): MySQL服务器使用——skip-grant-tables选项运行,因此无法执行此语句”
我也想了很多方法
开始以为是格式问题;于是在my.cnf 文件中加入了格式语句;但是不顶用还是报错
[mysqld]
character_set_server = utf8
[mysql]
default-character-set = utf8
之后发现完全不是这样;
正常来讲;我们在修改语句后会刷新权限;flush privileges;
但是在之后我才知道;MySQL8.0中需要先刷新权限;再去修改密码
命令:
flush privileges;
alter user 'root'@'localhost' identified by 'zhoulin1997';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
错误1819 (HY000):您的密码不满足当前策略要求;
所以接下来是查看当前策略
SHOW VARIABLES LIKE 'validate_password%';
于是重新修改alter user 'root'@'localhost' identified by 'zhou1997';
还是不行;我们详细观察了一下MySQL8.0的策略;这两个字段一个规定了策略等级;一个规定了密码长度
字段 | 备注 |
---|---|
validate_password.policy | MEDIUM |
validate_password.length | 8 |
所以 是zhou1997密码 的复杂度(即策略等级)达不到 medium(中等)这个等级;那就调低策略等级
set global validate_password.policy=0 ;
之后我们再次查看一下策略;明显变为了low
再次修改密码
执行命令:alter user 'root'@'localhost' identified by 'zhou1997';
修改成功并退出!;
5.取消第一步中加入的“skip-grant-tables`”删掉保存退出
vim /etc/my.cnf
去除 skip-grant-tables; 、
命令行模式保存退出:wq!
重启MySQL服务
```systemctl stop mysqld.service
systemctl start mysqld.service
重新登录
mysql -u -root -p
输入密码 成功!
过程中引用的文章Linux下安装MySQL及重置mysql8.0密码
MySQL 8:密码策略设定