重置 mysql root 密码

这可能是建站以来遇见的最大的一次困难了,因为建站的时候直接使用了宝塔然后一键部署,我今天突发奇想既然网站已经搭建好,我已经不需要宝塔了,然后就进行了宝塔的卸载。这就是噩梦的开始。
显然仅卸载宝塔对网站没有任何影响。但是之前我用到过宝塔的数据库备份功能,所以我打算重新去写数据库备份的脚本。就当我兴致冲冲去运行脚本的时候,mysql 就报错了,说我的角色权限不足,不能备份数据库里的数据。

1
mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces

这里提到为什么我不知道 root 密码,因为一键部署的话他是会给你创一个新的角色然后去使用数据库,这就导致了他在给我数据库密码的时候只给了我这个角色的名称和密码,具体 root 的密码我在网上查说是面板里可以看,但是我这时候已经卸载了,而且这个面板只支持纯净系统里安装。


回归正题,感谢 chatgpt。这次真的是幸运,因为网上搜的杂七杂八的,有的连 markdown 都不写,运行语句都连在一起,也不知道哪里应该替换成自己的,索性去问了 chatgpt,最开始我是怀疑它给出的方案的,因为里面的语句和我查到了别人博客里写的不太一样。但是最终还是成功了,所以我不敢保证我这里的方法对你们是否有用,起码思路应该是正确的。
这里提示以下我的系统是 ubuntu2204,mysql5.7。


如果你忘记了 MySQL root 用户的密码,你可以通过以下步骤重置密码:

  1. 停止 MySQL 服务:首先,停止 MySQL 服务以确保没有活动的数据库连接。你可以使用以下命令停止 MySQL 服务:

    1
    sudo systemctl stop mysql

    或者,如果你使用的是旧版本的 Ubuntu,可以使用以下命令:

    1
    sudo service mysql stop
  2. 启动 MySQL 服务,并跳过权限验证:使用以下命令启动 MySQL 服务,但跳过权限验证,这样你就可以在不知道密码的情况下登录:

    1
    sudo mysqld_safe --skip-grant-tables --skip-networking &
  3. 登录到 MySQL 服务器:现在你可以使用以下命令登录到 MySQL 服务器,不需要密码:

    1
    mysql -u root
  4. 重置密码:在 MySQL 命令行中,执行以下命令来重置 root 用户的密码:

    1
    2
    FLUSH PRIVILEGES;
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

    'new_password' 替换为你想要设置的新密码。

  5. 退出 MySQL 并重新启动服务:退出 MySQL 命令行界面,并重新启动 MySQL 服务以使更改生效:

    1
    sudo systemctl restart mysql

    或者:

    1
    sudo service mysql restart

现在,你应该可以使用新密码登录到 MySQL 服务器了。


值得一提的是,如果 mysql 卡死不能执行命令的时候,ctrl+d 可以强制退出 mysql 回到 linux