Mysql忘了root密码怎么办

引言

在准备做Windows程序设计的大作业时,需要用到 Mysql。打开了 Mysql WorkBench 连接本地数据库时,提示要输入 root 密码,试了几个常用密码无果后,发现自己再次忘记了 Mysql 的 root 密码。但是没有关系,本人已经习惯忘记各种不太常用的账号密码了,驾轻就熟地打开百度搜索相关方法,却发现来来去去都是那同一个方法,而且还因为版本问题与实际情况有些差异,最终还是花费了不少的时间,有点难受,遂写一文记录一下。

方法

思路

纵观百度各种方法,思路均是大致一样:运用mysql的-skip-grant-tables参数,可以使进入 mysql 时免去密码验证,进入 mysql 后修改mysql.user用户表中 root 用户的密码,以达到解决忘记密码的问题。

具体步骤

  1. 以管理员身份打开 cmd,关闭 mysql

    1
    net stop mysql
  2. 输入

    mysqld -nt -skip-grant-tables

    回车后界面卡住

  3. 以管理员身份打开另一个cmd,输入

    mysql -u root -p

    回车后进入mysql

  4. 接下来在mysql中修改root用户的密码,相应的用户信息也是按数据表的形式存储在 mysql.user 中,我们就可以改数据库数据的方式来修改密码,但这里有一点问题,mysql 的几个版本的用户表的列名都不一样,需要区别对待

    • mysql 5.6

      1
      2
      update mysql.user set password=password('newpassword') where user = 'root';
      flush privileges;
    • mysql 5.7:password列消失,取而代之的是authentication_string

      1
      2
      update mysql.user set authentication_string=password('newpassword') where user = 'root';
      flush privileges;
    • mysql 8:password函数被移除,需要改变方式

    1
    2
    flush privileges;
    alter user 'root'@'localhost' identified by 'newpassword';

    该方法是同时适用与mysql5.7和8,可谓是一种更为优雅的方法

  5. 重新启动mysql,正常使用

    1
    2
    net start mysql
    mysql -u root -p

后续

修改root密码方法的教程网上有很多,但是我经过一通操作后,还是无法进入mysql。在进行上文的方法操作时,在通过 -skip-grant-tables 时我便出现了错误,提示mysql根目录中data目录不存在,搜索网上的教程,建议是自己新建一个data文件夹,新建后便可正常免密码验证进入mysql。但按照后续的步骤操作后,还是无法正常修改root密码,进入 mysql。仔细思考,为什么我这里没有data目录,不仅如此,我这里还没有在众多教程中提到的my.ini配置文件,突然想起,自还原电脑后,我好像还没在本系统使用过mysql,我的mysql还没有初始化,其实并不算是忘记root密码的问题(可能是我太经常忘记了,已经习以为常)。但因为我强行新建了 data 目录,进入 mysql,已经打乱了项目的结构,无法还原。反正里面没什么数据,就打算干脆删了重新装一个 mysql。

卸载

mysql的卸载比较简单,当时我是用 Mysql Installer 安装的,直接进入 Mysql Installer 进行卸载即可。如果不是的话,就比较麻烦了,到控制面板把 Mysql Server 卸载了,再把 mysql 项目所在文件夹删除,然后再到注册表删除相关项,详情可参照这里

安装

两种方法

  • 一是使用 Mysql Installer。使用该在线安装软件非常方便,还可选择安装配套的 mysql 相关软件,安装完后可直接进入傻瓜式配置,无需进行额外的配置,且后续的卸载也可以在这上面进行,个人比较推荐。但该软件只能运行在 Windows 上,且只能安装最新版本的 mysql8。尝试了一下,在初始化数据库时出现问题,而搜索该问题发现关于新版本 mysql 的相关信息非常少,遂放弃新版本,放弃该方式。

  • 二是使用压缩包安装。选择相应的版本下载压缩包解压即可。这种方式则需要手动额外配置。主要步骤有

    • 创建配置文件 my.ini,下面的 basedir 和 datadir 替换为本机 mysql 目录,若有则不用创建

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      [mysqld]
      port = 3306
      basedir=C:/software/mysql-5.7.21-winx64
      datadir=C:/software/mysql-5.7.21-winx64/data
      max_connections=200
      character-set-server=utf8
      default-storage-engine=INNODB
      sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
      [mysql]
      default-character-set=utf8
    • 增加环境变量。将C:/software/mysql-5.7.21-winx64/bin添加到path中(注意换成本机mysql目录)

    • 安装mysql

      1
      mysqld -install
    • 初始化MySQL

      1
      mysqld --initialize-insecure --user=mysql
    • 启动mysql

      1
      net mysql start
    • 设置root密码,回车后会提示输入旧密码,直接回车即可

      1
      mysqladmin -u root -p password 密码
    • 安装完成