MySQL 8 重置 `root` 用户密码

在安装 MySQL 的过程中有一个初始化数据库的操作:mysqld --initializemysqld --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

  1. 将下述命令保存在一文本中,例如:/tmp/pwd-reset
ALTER USER 'root'@'localhost' IDENTIFIED BY 'test';
  1. 通过命令行方式,使用 --init-file 初始化 mysqld 服务(&-在后台运行)
mysqld –init-file=/tmp/pwd-reset &
  1. 通过 mysql 客户端连接到本机服务
mysql -uroot -ptest

注意: mysql -ppassword 表示 password 是密码部分;mysql -p xxx表示需要用户手动输入密码,然后默认进入到 xxx 数据库-相当于登录之后默认执行一句:use xxx;进行切换数据库

  1. 查看 root 用户有哪些 host

select users

select user,host from mysql.user where user='root';
  1. 修改 root 用户密码
-- 修改 root 用户密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword' PASSWORD EXPIRE NEVER;
ALTER USER 'root'@'%' IDENTIFIED BY 'NewPassword' PASSWORD EXPIRE NEVER;

-- 刷新当前服务权限
flush privileges;

注意事项

  1. ** 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 - 随机密码}

set password for user to random

不管使用哪种方式重置密码,最后都要记得执行 flush privileges; 刷新当前服务的权限列表!

  1. 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

转载请声明出处: MinsonLee的博客:https://minsonlee.github.io

扫描下方二维码,关注公众号,接收更多实时内容

新猿呓码

打赏一个呗

取消

感谢客官打赏,您的打赏使我动力十足!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦