CentOS8下MySQL8.0.24重置root密码失败求助
问题:CentOS 8.0下MySQL 8.0.24重置root密码失败
当前MySQL的user表内容:
+------------------+-----------+ | user | host | +------------------+-----------+ | mysql.infoschema | localhost | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | +------------------+-----------+
尝试执行密码重置命令:
ALTER USER 'root'@'localhost' IDENTIFIED BY '111';
报错:
ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'
改用UPDATE命令:
update mysql.user set authentication_string='111' where user='root';
执行成功后刷新权限:
FLUSH PRIVILEGES;
查询user表可见root的authentication_string为明文111,但正常启动MySQL后用密码111登录时:
mysql -u root -h localhost -p
报错:
ERROR 1045 (28000): Access denied for user 'root'@'localhost'
正确的密码重置流程
- 停止当前MySQL服务
systemctl stop mysqld
- 启动MySQL并跳过权限验证(添加
--skip-networking避免外部连接风险)
mysqld_safe --skip-grant-tables --skip-networking &
- 无密码登录MySQL
mysql -u root
- 切换到系统库
mysql
USE mysql;
- 刷新权限(解决
ALTER USER报错1396的关键步骤)
FLUSH PRIVILEGES;
- 使用
ALTER USER设置新密码(替换YourNewPassword为你的目标密码)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPassword';
- 再次刷新权限
FLUSH PRIVILEGES;
- 退出MySQL
EXIT;
- 终止安全模式的MySQL进程,启动正常服务
pkill mysqld systemctl start mysqld
- 使用新密码登录验证
mysql -u root -p
问题原因说明
ALTER USER报错1396:在跳过权限验证的启动模式下,MySQL未加载权限表,必须先执行FLUSH PRIVILEGES让系统识别用户对象,才能执行ALTER USER操作。- UPDATE命令无效:MySQL 8.0的
authentication_string字段存储的是经过SHA-256哈希处理的密码值,直接设置明文会导致登录时验证失败,必须通过ALTER USER或SET PASSWORD命令让系统自动生成正确的哈希值。
内容的提问来源于stack exchange,提问作者Youshikyou
相关产品推荐
相关产品推荐

