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