在网上查看了很多资料来修改mysql的root账号密码,但是修改的时候总跟网上的教程里的不一样,不知道是不是因为版本原因。因此将解决办法和不同点都发上来,仅供参考,共同学习。

1. 找到my.ini文件,配置跳过权限表

my.ini文件,一般在隐藏文件夹ProgramData目录下的mysql里

mysql restore 跳过错误 mysql跳过权限检查_database

2. 在【mysqld】下配置skip-grant-tables

mysql restore 跳过错误 mysql跳过权限检查_mysql restore 跳过错误_02

3. 重启mysql服务

这个方法就多了。可以使用mysql 自带的 MySQL Notifier。或者去windows的服务里面重启。或者在cmd命令行里重启。

方法一:右下角的MySQL Notifier

mysql restore 跳过错误 mysql跳过权限检查_database_03

点击restart即可。
注:如果右下角没有,可以在开始菜单里找一下,开始菜单里没有就是mysql安装的时候没安装了,可以在打开安装程序,安装即可。

方法二:

win+r 运行services.msc

mysql restore 跳过错误 mysql跳过权限检查_mysql_04

然后找到mysql服务,进行重启

mysql restore 跳过错误 mysql跳过权限检查_重启_05

方法三:

cmd命令行内,输入net stop mysql57停止mysql服务,start启动服务。

mysql restore 跳过错误 mysql跳过权限检查_重启_06


如截图一样即停止、启动成功。如果提示 服务名无效,本文结尾处有解决方案。

4. 打开cmd,登录mysql

进入到mysql的bin目录,输入mysql,即可跳过密码验证登录到mysql,并且所有数据库都可以查看的到。

mysql restore 跳过错误 mysql跳过权限检查_mysql restore 跳过错误_07

5. 修改密码

# 修改root账号密码
update mysql.user set authentication_string = password('123456') where user='root';

也可以先use mysql,然后

update user set authentication_string = password(‘123456’) where user=‘root’;

6. 刷新权限

flush privileges;

7. 将配置文件的skip-grant-tables删除,并重启mysql服务



接下来,记录一下遇到过的问题。

1、net stop mysql

mysql restore 跳过错误 mysql跳过权限检查_重启_08

输入提示 服务名无效。

原因: 服务名与本机的服务名不一致,这个是在mysql安装的时候配置的。mysql5.7默认服务名为mysql57 。这个可以在windows的服务列表里查看。

只要输入的与服务列表里的一致,就可以正常关闭了。

mysql restore 跳过错误 mysql跳过权限检查_重启_05

2、不是在配置文件中跳过的权限表,而是使用的命令。

输入mysqld --skip-grant-tables 回车。

(–skip-grant-tables 的意思是启动 MySQL 服务的时候跳过权限表认证)

注意:这时候,刚刚打开的 cmd 窗口已经不能使用了。重新再 bin 目录下打开一个新的 cmd 窗口进行下面的操作。

此时,新打开的cmd窗口,查询的数据库只有一个,没有mysql库。

mysql restore 跳过错误 mysql跳过权限检查_数据库_10

原因: 猜测是没有读取到mysql的data文件夹。因为在mysql的配置文件中有配置datadir,但是无权限进入后没有配置data目录 。因此无法读取到其他数据库。因此采用修改配置文件my.ini的方式即可。

3. 修改时提示Unknown column ‘Password’

update user set password=password("123456") where user="root";
mysql> update user set Password=password('123456') where user='root';

ERROR 1054 (42S22): Unknown column 'Password' in 'field list'

这里要更改的是 authentication_string, 而不是 password 字段。否则就会报错

update user set authentication_string = password ('new-password') where user = 'root';