问题描述

之前开发一个项目,在本地建了一个MySQL数据库,后来项目搁浅,MySQL数据库就一直躺在硬盘里。也不知道过了多久,现在需要回过头来继续开发项目,但是MySQL密码早就忘记了,尴尬⊙﹏⊙‖∣
好在MySQL服务和安装目录都还在,所以尝试着按照网上的教程来重置MySQL密码。

启动MySQL、并重置密码

MySQL通常是通过服务来启动,不过除了服务来启动,还可以通过命令行的方式来启动。

  1. 首先找到打开服务窗口,找到MySQL服务,双击查看服务详情。
  2. 通过服务详情,我们可以看到实际该服务的执行命令为D:\mysqlx64_5.6.16\bin\mysqld MySQL,即实际上服务是通过调用mysql命令行来启动MySQL服务的,其中所以我们可以手动在命令行窗口来通过执行mysqld命令来启动mysql。如下:
mysqld MySQL

可以经过一顿操作之后,发现通过上面的操作之后,MySQL进程并没有启动,真是大写的尴尬。

mysql 密码重置工具 windows mysql 忘记密码重置密码_命令行


后来通过一番排(bai)查(du)之后发现如果需要通过命令行来启动MySQL,则需要添加--console参数,即完整的命令应该是:

mysqld --console

通过上面的命令,可以成功启动MySQL,并且进程列表里也能找到mysqld的进程:

mysql 密码重置工具 windows mysql 忘记密码重置密码_mysql_02


mysql 密码重置工具 windows mysql 忘记密码重置密码_MySQL_03

  1. 接下来算是比较关键的一步,就是通过跳过权限验证的参数来启动MySQL。
    在命令行窗口,按Ctrl + C结束上面的MySQL进程之后,另外添加skip-grant-tables参数,可以以跳过权限验证的方式启动MySQL。
mysqld --console --skip-grant-tables

此时我们可以看到MySQL正常启动:

mysql 密码重置工具 windows mysql 忘记密码重置密码_命令行_04

  1. 通过上述方式启动MySQL后,我们再通过数据库连接工具,比如Navicat,连接本地的MySQL。由于MySQL启动时加了skip-grant-tables参数,此时我们可以输入任何的账号和密码登录MySQL。
  2. 修改MySQL中root的密码。
    MySQL中所有的用户信息都存在mysql.user表,我们可以通过修改该表的相关信息来达到修改密码的目的。
update mysql.user set password = password ('abc123') where user = 'root'; -- 其中abc123为新密码
flush PRIVILEGES; -- 刷新MySQL的系统权限相关表
  1. 执行完上述操作后,就可以通过正常方式重新启动MySQL,并用新密码进行登陆了。

写在最后

对于参数skip-grant-tables,除了可以在命令行的的方式添加,也可以通过修改MySQL配置文件my.ini的方式添加,在此不展开来讲。对于正式生产环境,一定要记得关闭该参数,切记!!!