Home

MySQL 8.0 安装后修改 root@localhost 的默认空密码

这篇文章记录 MySQL 8.0 安装后,root@localhost 账户默认是空密码,但按老办法修改密码失败时的处理过程。问题本质上和认证插件、密码策略以及初始化方式有关。

问题背景

Red Hat 8.3 上替换 CentOS 8 的 yum 源后安装 MySQL 8.0,发现 root 账户默认可以空密码进入,但后续按传统方法修改密码并不顺利。

同时查看初始密码相关信息时,也没有得到常见的临时密码输出。

现象说明

MySQL 初始化过程中会给出类似提示:

root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option

这说明当前环境中的 root@localhost 是以空密码方式创建出来的。

另外再查看密码校验相关配置时,可能会发现:

SHOW VARIABLES LIKE 'validate_password%';

返回为空,这意味着当前环境中的密码校验插件和旧版本环境可能并不一致。

处理方法一:修改默认认证插件

可以先尝试修改 my.cnf,把默认认证插件改成 mysql_native_password

vim /etc/my.cnf

[mysqld] 下增加:

default_authentication_plugin=mysql_native_password

然后重启 MySQL。

这种方式更适合你想从全局上调整默认认证行为的场景。

处理方法二:直接修改 root 用户认证方式

如果第一种方式没有生效,可以直接登录 MySQL 后执行:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword';
FLUSH PRIVILEGES;

文中的实际处理结果是:第一种方式无效,第二种方式直接修改成功。

如果只是普通改密码

如果认证插件本身已经没问题,只是想正常改密码,也可以直接执行:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';

或者在终端使用:

mysqladmin -uroot -p'oldpassword' password 'newpassword'

常见报错

如果新密码过于简单,可能会遇到类似报错:

ERROR: Your password does not satisfy the current policy requirements

这时候就不是认证插件的问题了,而是密码策略限制导致的,需要把新密码调复杂,或者再检查当前密码策略设置。

总结

这类问题最容易混在一起的,其实有三件事:

  • root 是否以空密码创建
  • 当前使用的是哪种认证插件
  • 密码策略是否拦住了你的新密码

实际处理时,建议按这个顺序排查。文中的场景最终有效的方法,是直接执行 ALTER USER ... IDENTIFIED WITH mysql_native_password BY ...

技术分享