• mysql 忘记 root 密码的解决办法(针对不同 mysql 版本)


    1.前提说明

    1.1 cmd 窗口打开方式

    cmd 命令窗口请以“管理员”身份打开运行,否则可能提示权限不足。(net 命令需要管理员权限

    1.2 mysql 服务相关命令知识补充

    # 安装 mysql 服务
    mysqld -install
    
    # 安装 mysql 服务并指定服务名称,格式:mysqld -install [ServiceName]
    # 如果不指定服务名,默认的服务名称为 mysql
    mysqld -install mysql80
    
    # 移除 mysql 服务,格式:mysqld --remove [ServiceName]
    mysqld --remove mysql80
    
    # 启动 mysql80 服务,格式:net start [ServiceName]
    net start mysql80
    
    # 查看正在运行的所有服务
    net start
    
    # 查看特定服务,通过字符串过滤完成,格式:net start | findstr [ServiceName]
    net start | findstr mysql80
    
    # 停止 mysql80 服务,格式:net stop [ServiceName]
    net stop mysql80
    

    1.3 三个 mysql 版本说明

    文章共给出三个 MySQL 阶段版本的忘记密码解决办法,分别是:

    • MySQL 5.7.6 以前
    • MySQL 5.7.6 及以后(MySQL 8.0 以前)
    • MySQL 8.0+

    MySQL 有一个 5.7.6 分界线,是由于从 MySQL 5.7.6 版本开始,mysql.user 表中的 password 列已被废弃,并且从 MySQL 8.0 版本中完全移除。在 MySQL 5.7.6 及以后的版本中,密码存储在 authentication_string 列中,该列使用的是新的身份验证插件和密码哈希算法。

    MySQL 5.7.6 官方文档原文

    The authentication_string column in the mysql.user table now stores credential information for all accounts. The Password column, previously used to store password hash values for accounts authenticated with the mysql_native_password and mysql_old_password plugins, is removed.

    1.4 运行时可能发生的报错问题

    如果严格按照我的步骤来,应当是不会报错的,但如果漏掉了某些步骤,可能会发生命令报错。

    🍀 跳过密码授权命令报错

    执行 mysqld --console --skip-grant-tables --shared-memory 时窗口未卡主,且有 [ERROR]

    image-20240625180832782

    这是由于没有执行我给的步骤 1“停止 MySQL 服务”,因此,在执行 net stop [mysql服务名] 后,窗口就会卡主且不会有报错了。

    image-20240625180734331

    🍀 修改密码时报错

    image-20240625181124106

    报错:ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

    这是由于没有关闭“跳过密码授权”窗口导致的,因此只需要关闭授权窗口即可。

    🍀 ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost’

    这是由于关闭了 mysql 服务导致的,因此只需要通过 net start [ServiceName] 打开 Mysql 服务即可。

    例如:

    net start mysql57
    

    2.MySQL 5.7.6-(不包括 5.7.6)

    这里以 MySQL 5.7.5 作为示例。

    1. 打开 cmd,停止 MySQL 服务,格式:net stop [服务名称]。我这里的服务名称是 MySQL575,你的可能是 mysql,因为 mysql 是默认的服务名称。

      net stop mysql575
      

      服务名称查找方式:win + r 打开“运行”,输入 services.msc,查找你的 MySQL 服务名称。

      image-20240625174905477

    2. 跳过密码授权。

      mysqld --console --skip-grant-tables --shared-memory
      

      注意这个 mysqld 需要在环境变量下配置到 mysql 的 bin 目录,或者直接在 bin 目录下执行该指令。

      image-20240625175028799

    3. 打开一个新的 cmd 窗口,输入 mysql 可直接进行 mysql 管理。注意“跳过密码授权”这个 cmd 窗口不要关闭。

      image-20240625175821605

    4. 清空密码

      UPDATE mysql.user SET password=”” WHERE user=“root”;
      
      exit;
      
    5. 接着,一定要关闭“跳出密码授权”窗口,在新窗口启动 mysql 服务并进入 mysql 管理。

      # 1.启动 mysql 服务。格式:net start [服务名称]
      net start mysql575
      
      # 2.进入 mysql,无密码
      mysql -uroot
      
    6. 修改密码并刷新权限。

      -- 1.修改密码
      SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');
      
      
      -- 2.刷新权限
      flush privileges;
      
      -- 3.退出
      exit;
      
    7. 再次登录。

      mysql -uroot -p123456
      

      image-20240625175603370

    3.MySQL 5.7.6+(包括 5.7.6)

    这里以 MySQL 5.7.35 作为示例。

    1. 打开 cmd,停止 MySQL 服务,格式:net stop [服务名称]。我这里的服务名称是 MySQL57,你的可能是 mysql,因为 mysql 是默认的服务名称。

      net stop mysql57
      

      服务名称查找方式:win + r 打开“运行”,输入 services.msc,查找你的 MySQL 服务名称。

      image-20240625164735532

    2. 跳过密码授权。

      mysqld --console --skip-grant-tables --shared-memory
      

      注意这个 mysqld 需要在环境变量下配置到 mysql 的 bin 目录,或者直接在 bin 目录下执行该指令。

      image-20240625164943795

    3. 打开一个新的 cmd 窗口,输入 mysql 可直接进行 mysql 管理。注意“跳过密码授权”这个 cmd 窗口不要关闭。

      image-20240625175953864

    4. 清空密码

      UPDATE mysql.user SET authentication_string=”” WHERE user=“root”;
      
      exit;
      
    5. 接着,一定要关闭“跳出密码授权”窗口,在新窗口启动 mysql 服务并进入 mysql 管理。

      # 1.启动 mysql 服务。格式:net start [服务名称]
      net start mysql57
      
      # 2.进入 mysql,无密码
      mysql -uroot
      
    6. 修改密码并刷新权限。

      -- 1.修改密码
      ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY "123456";
      
      -- 2.刷新权限
      flush privileges;
      
      -- 3.退出
      exit;
      
    7. 再次登录。

      mysql -uroot -p123456
      

      image-20240625180123964

    4.MySQL 8.0

    1. 打开 cmd,停止 MySQL 服务,格式:net stop [服务名称]。我这里的服务名称是 MySQL80,你的可能是 mysql,因为 mysql 是默认的服务名称。

      net stop mysql80
      

      服务名称查找方式:win + r 打开“运行”,输入 services.msc,查找你的 MySQL 服务名称。

      image-20240625171529375

    2. 跳过密码授权。

      mysqld --console --skip-grant-tables --shared-memory
      

      注意这个 mysqld 需要在环境变量下配置到 mysql 的 bin 目录,或者直接在 bin 目录下执行该指令。

      image-20240625170538451

    3. 打开一个新的 cmd 窗口,输入 mysql 可直接进行 mysql 管理。注意“跳过密码授权”这个 cmd 窗口不要关闭。

      image-20240625162953575

    4. 清空密码

      UPDATE mysql.user SET authentication_string=”” WHERE user=“root”;
      
      exit;
      
    5. 接着,一定要关闭“跳出密码授权”窗口,在新窗口启动 mysql 服务并进入 mysql 管理。

      # 1.启动 mysql 服务。格式:net start [服务名称]
      net start mysql80
      
      # 2.进入 mysql,无密码
      mysql -uroot
      
    6. 修改密码并刷新权限。

      -- 1.修改密码
      ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY "123456";
      
      -- 2.刷新权限
      flush privileges;
      
      -- 3.退出
      exit;
      
    7. 再次登录。

      mysql -uroot -p123456
      

      image-20240625163503623

  • 相关阅读:
    RunApi在发送请求的时候添加Token
    电脑开不了机是什么原因?
    传输层协议:TCP/IP协议,UDP的协议
    【解决方案】校园明厨亮灶监控系统实施方案
    Hadoop 高可用安装
    微搭低代码中实现增删改查
    LVGL 日历组件
    算法通过村第十三关-术数|黄金笔记|数论问题
    特征值求导推导
    wangshusen学习笔记
  • 原文地址:https://blog.csdn.net/qq_62982856/article/details/139974178