avatar

目录
MySQL 忘记 root 用户密码

最近想在自己机子上搞个数据库弄点小项目玩玩,突然发现已经好久没有登过本机的MySQL服务器了,这不,root用户的密码都给整忘了…密码其实之前写在备忘录里头,可是有天手贱把备忘录给删了个一干二净,彻底找不回来了!贼尴尬!

不过不用慌,遇事不决用 Google (不是,是百度),一番尝试之后,马上就解决了这个问题,此处做个步骤记录,留个备忘。

解决步骤如下:

  1. 打开MySQL的配置文件 my.ini 文件 (windows下), linux下是 /etc/my.cnf. 找到 [mysqld] 这一段配置的位置,加上 shared-memoryskip-grant-tables 这个配置,保存并退出。

  2. 重启 MySQL 服务, windows 下可以使用 net start mysql 命令,待 MySQL 正常启动之后,使用命令行用 root 用户登录到 MySQL. 直接输入

    shell
    1
    mysql -u root

    然后直接回车,可以成功登录 MySQL 服务端。

  3. 接着,在命令行终端输入use mysql 更改目标数据库为 mysql. 修改 mysql数据库的 user 表。SQL语句如下:

    sql
    1
    update user set password=password('new password') where user='root';

    将其中的 'new password'改为自己想要设置的新密码,上述改法适用于 MySQL 5.x 版本。

    注意:如果是 MySQL 8.0及以上版本,对应的修改 SQL 应为:

    sql
    1
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword'

    注意 !!! 这是网上说的最多的解决方案! 百度搜索出来之后一堆中文文章都是告诉你应该这样去做……然并卵! 上述这种改法并不能解决问题!!!

    最后百般尝试失败之后,我尝试了用英文关键字在Google上搜了一把!结果终于让我在爆栈上找到一个靠谱的解决办法!

    直接说就是

    sql
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 1. 如果在 skip-grant-tables 模式下,执行下列步骤
    UPDATE mysql.user SET authentication_string='' WHERE User='root';
    FLUSH PRIVILEGES;
    exit;
    # 然后开一个新的终端,重新登录
    mysql -u root
    # 下面这句才是改动成功的至关重要的一步!!!
    ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd'

    # 2. 如果不在 skip-grant-tables 模式下, 那么直接执行:
    ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd'
  4. 刷新权限flush privileges,完成之后退出终端

  5. 重新启动 MySQL 服务,新开一个命令行终端使用新设置的密码登录,如果成功登录,就证明本次修改 root 用户密码成功了。

最后是吐个槽:

刚开始按照网上的说法试了好多遍一直报各种奇奇怪怪的错!也难怪,现在网上的文章特别是CSDN这一类的都是一大抄,有时候就是很难找到靠谱的东西,所以关键还是要学会科学上网啊,只有这样才能省时省力!


参考链接:

  1. How to reset the root password in MySQL 8.0.11?
文章作者: JanGin
文章链接: http://jangin.github.io/2021/05/07/how-to-reset-root-password-for-mysql/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 JanGin's BLOG

评论