在安装 MySQL 的过程中有一个初始化数据库的操作:mysqld --initialize或mysqld --initialize --console,这个操作中会生成一个 MySQL 用户: root@localhost,同时还有其初始化密码,要记下!要记下!要记下!
MySQL 8 忘记密码
在 MySQL 8 之前的旧版本是可以通过 MySQL安装目录》data目录》xxx.err文件,使用编辑器打开,搜索关键字 temporary password 查询初始密码,但是在 MySQL 8 及其以后的版本中这个 log 没有再记录该初始密码了!
同时,直接使用 mysqld --skip-grant-tables 操作也不能直接实现免密登录操作了,需要利用 init-file 参数解决,如下!
详细信息请查看官网:How to Reset the Root Password。
- 将下述命令保存在一文本中,例如:
/tmp/pwd-reset
ALTER USER 'root'@'localhost' IDENTIFIED BY 'test';
- 通过命令行方式,使用
--init-file初始化mysqld服务(&-在后台运行)
mysqld –init-file=/tmp/pwd-reset &
- 通过
mysql客户端连接到本机服务
mysql -uroot -ptest
注意: mysql -ppassword 表示 password 是密码部分;mysql -p xxx表示需要用户手动输入密码,然后默认进入到 xxx 数据库-相当于登录之后默认执行一句:use xxx;进行切换数据库
- 查看
root用户有哪些host

select user,host from mysql.user where user='root';
- 修改
root用户密码
-- 修改 root 用户密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword' PASSWORD EXPIRE NEVER;
ALTER USER 'root'@'%' IDENTIFIED BY 'NewPassword' PASSWORD EXPIRE NEVER;
-- 刷新当前服务权限
flush privileges;
注意事项
- **
MySQL 8已经废弃了PASSWORD()函数改用了IDENTIFIED BY 'newPassWord'的方式生成加密密码,因此旧版本的设置密码方式不可行了!**
官方重置密码文档提供了两种方式:
ALTER方式(可以同步设置密码过期策略、自定义密码):ALTER USER 'username'@'host' IDENTIFIED BY 'NewPassword' [PASSWORD EXPIRE NEVER];SET PASSWORD方式(可以生成随机强密码,适合生产但需要额外设置密码的过期策略):SET PASSWORD [FOR 'user'@'host' ] {= '自定义密码' | TO RANDOM - 随机密码}

不管使用哪种方式重置密码,最后都要记得执行 flush privileges; 刷新当前服务的权限列表!
MySQL的密码管理机制中用户的密码默认是有期限的,若用户密码过期了,即使用户登录完成后是无法执行任何DDL语句的,否则会报错:ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executin。
要关闭 Password Expiration Policy 机制,也提供了两个方式:
- 方式1-修改单用户密码永不过期
ALTER USER 'user'@'host' PASSWORD EXPIRE NEVER - 方式2-修改
my.cnf配置文件,全局设置用户密码不过期
[mysqld]
default_password_lifetime=0


