You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL 5.6无root用户却能登录,如何重置root密码?

为什么无root账号仍能以root登录?

这事儿我之前帮朋友排查过,其实原因很简单:当你用mysqld_safe --skip-grant-tables启动MySQL时,它会直接跳过权限验证逻辑——也就是说,MySQL根本不会去查mysql.user表确认用户名是否存在、有没有登录权限。不管你输入什么用户名(哪怕是完全不存在的),甚至直接敲mysql不指定用户名,都能直接进入数据库。这个参数就是专门为权限表损坏、丢失或者忘记密码这类场景设计的,让你能强行进入数据库修复问题。

如何重置MySQL 5.6的root密码(并恢复root账号)

既然你的mysql.user表里没有root账号,那我们得先创建账号再设置密码,一步步来:

  1. 保持当前已经登录的mysql客户端窗口打开,先切换到系统核心数据库:
USE mysql;
  1. 创建本地登录的root账号并设置密码(把your_new_password换成你自己的密码):
CREATE USER 'root'@'localhost' IDENTIFIED BY 'your_new_password';

如果需要允许root远程登录(生产环境不建议随便开,谨慎使用),可以额外执行这条:

CREATE USER 'root'@'%' IDENTIFIED BY 'your_new_password';
  1. 给root账号授予所有权限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;

如果创建了远程root账号,对应执行:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
  1. 手动刷新权限(因为当前是跳过权限表启动的,必须手动刷新才能让新的权限配置生效):
FLUSH PRIVILEGES;
  1. 退出MySQL客户端:
EXIT;
  1. 停止之前用mysqld_safe --skip-grant-tables启动的MySQL进程:

    • 如果是在终端直接启动的,按Ctrl+C即可终止;
    • 也可以用命令终止进程:
      pkill mysqld_safe
      pkill mysqld
      
  2. 正常启动MySQL服务:

service mysql start
  1. 用新密码测试登录:
mysql -u root -p

输入你刚才设置的密码,就能正常登录了。

额外小提醒

  • 如果执行CREATE USER时提示账号已存在,说明你之前的查询没查全——user表的主键是User+Host,可能root账号存在于其他主机(比如root@127.0.0.1),可以用这条命令查看所有用户:
    SELECT User, Host FROM mysql.user;
    
  • --skip-grant-tables模式下数据库完全开放,处理完后一定要立即恢复正常启动,避免安全风险。

内容的提问来源于stack exchange,提问作者all_techie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:32:37