我们有时候会忘记数据库的密码,老李也遇到过这种问题。报错如下:
在网上找了几十篇解决方案,然后挨个测试,发现并不好使,刚开始找到的解决方案都是在配置文件my.ini内添加命令skip-grant-tables,然后通过命令net start mysql重新启动数据库,skip-grant-tables命令是在登录的时候跳过权限校验的方式,然后进入数据库后修改密码即可。但是mysql8.0以后这种方式不好使了,在配置文件中添加了skip-grant-tables命令后,重新启动失败,无法启动,所以我觉得有必要整理一下解决方案。
接下来分别介绍下8.0以后和8.0以前版本的解决方案。
Mysql8.0后的版本
mysql8.0以后只能通过cmd命令行中执行mysqld --console--skip-grant-tables --shared-memory启动服务后免密登陆。因为每个人环境的不同,有可能执行完后可以直接继续操作,但是我这儿报了个错,找不到data目录
如果出现这个问题,我们需要先执行命令mysqld--initialize-insecure --user=mysql,然后再执行上个命令(mysqld--console --skip-grant-tables --shared-memory)
我们先不关闭当前窗口,然后重新打开一个窗口执行命令mysql-uroot -p即可,密码为空,直接点击回车。
切换到mysql数据库“use mysql”,然后执行命令update mysql.user setauthentication_string='新密码' where user='root' ;进行修改。
最后执行命令flush privileges;刷新权限。
退出后重启服务,使用新密码即可进入。
8.0以前的版本
首先我们找到安装文件夹,找到my.ini文件,用笔记本的方式打开,并在【mysqld】下添加“skip-grant-tables”,如图:
保存关闭,然后回到命令行工具,启动mysql服务
执行命令“mysql-uroot -p”,不输入密码直接回车,成功进入mysql
使用mysql数据库“use mysql”,然后执行命令“update mysql .user setauthentication_string=password(“a123456”) where user = “root”;”修改root账户密码。
执行命令“flushprivileges”刷新权限
然后使用“quit”退出数据库,打开my.ini文件删除刚才添加的“skip-grant-tables”命令。保存关闭文件后,重启MySQL服务。
重新在命令行执行命令“mysql-uroot-p”输入刚才修改密码设置的密码“a123456”,成功进入数据库。
这样,我们就越过了数据库的校验成功登录数据库。