MySQL忘记root密码重置(Linux环境)
前言
忘记MySQL root密码是常见问题,不用慌,本文教你一步步重置。
重置步骤
第一步:停止MySQL服务
systemctl stop mysqld
第二步:以跳过权限模式启动
mysqld_safe --skip-grant-tables &
或者用这个方式:
systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"
systemctl start mysqld
第三步:无密码登录MySQL
mysql -u root
现在不需要密码就能直接进了。
第四步:修改密码
-- 刷新权限
FLUSH PRIVILEGES;
-- 修改密码(MySQL 5.7)
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
-- 如果上面不行,用这个
UPDATE mysql.user SET authentication_string=PASSWORD('你的新密码') WHERE User='root' AND Host='localhost';
-- 刷新权限
FLUSH PRIVILEGES;
第五步:退出,正常重启MySQL
exit
systemctl stop mysqld
systemctl start mysqld
第六步:用新密码登录测试
mysql -u root -p
输入新密码,能进去就成功了。
常见坑
坑1:MySQL 8.0和5.7语法不一样
MySQL 8.0 不能用 PASSWORD() 函数了。
解决: 用 ALTER USER 语句。
坑2:skip-grant-tables没生效
启动后还是要密码。
原因: 可能MySQL已经在跑了,新启动的没生效。
解决: 先彻底停掉MySQL:
systemctl stop mysqld
pkill -9 mysqld
再重新启动。
坑3:改完密码忘记FLUSH PRIVILEGES
改完密码直接退出,结果还是不能用新密码登录。
解决: 改完密码一定要执行 FLUSH PRIVILEGES;
坑4:远程登录还是不行
本地改完密码,远程连接还是连不上。
原因: root用户只允许本地登录。
解决: 需要单独授权远程登录:
CREATE USER 'root'@'%' IDENTIFIED BY '密码';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
总结
六步重置root密码:
- 停MySQL
- 跳过权限启动
- 无密码登录
- 改密码
- 正常重启
- 测试登录
记住: 改完密码一定要 FLUSH PRIVILEGES;
遇到问题加QQ23979811 协助处理