Win下Mysql根治ERROR 1045 (28000): Access denied for user的方法(绝对有效)

针对ERROR 1045 (28000): Access denied for user这个错误,网上大部分的办法是这样的:

1.停止Mysql服务

2.用mysqld -nt --skip-grant-tables方式启动(或者把my.ini里加一行-skip-grant-tables)

3.mysql -uroot直接进去

4.update user set password = password('newpass') where user = 'root';

5.结束mysqld -nt进程(或者去掉my.ini里的-skip-grant-tables)

6.启动Mysql服务

 

但是,这样做完之后,当你重启电脑后进入mysql却发现又出现ERROR 1045 (28000)了,用新修改的密码也进不了,这是为什么呢?

其实很简单,这是是一个数据路径的问题。

在Win平台下,Mysql的程序目录和数据目录默认是分开的,比如Mysql安装在 X:\Programs Files\Mysql 下,那么它的数据则存放在 X:\Programs Data\Mysql\Data 下,并且my.ini里的datadir默认也是 X:\Programs Data\Mysql\Data 这样一来用-skip-grant-tables强制修改密码就有问题了,因为用 -skip-grant-tables 修改后的用户数据被放在了 X:\Programs Files\Mysql\Data 下面

 

以Mysql5.6为例,比如程序安装在F:\Programs Files\Mysql\Mysql Server 5.6\下,数据文件存放在F:\Programs Data\Mysql\Mysql Server 5.6\下,正常情况下,数据的修改只会影响F:\Programs Data\Mysql\Mysql Server 5.6\Data里的文件,但是如果你用 -skip-grant-tables 修改了用户表user的话,修改后的数据则放在了 F:\Programs Files\Mysql\Mysql Server 5.6\Data 里面(比如新修改的root密码),而F:\Programs Data\Mysql\Mysql Server 5.6\Data 里的用户信息根本没变,这样你下次用新修改的密码登录的时候自然还会出错,因此在update user set password = password('newpass') where user = 'root';之后,一定要把F:\Programs Files\Mysql\Mysql Server 5.6\Data\Mysql,F:\Programs Files\Mysql\Mysql Server 5.6\Data\performance_schema 这两个数据库文件夹 覆盖到 F:\Programs Data\Mysql\Mysql Server 5.6\Data 里面去,然后再启动mysql,问题就解决了~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值