mysql密码正确无法登陆

MySQL root密码正确,却怎么也无法从本地登录提示:

1
1 ERROR 1045 (28000): Access denied for user 'root'@'localhost'(using password: YES)

后来发现mysql库中的user表缺少一个root指向host:localhost的数据项,只有一个root指向host:主机名的数据项,故怎么也无法利用root账户登录MySQL。

总结一点就是root账户缺失了访问localhost主机的账户信息,导致无法本地登录。

那有什么办法恢复root登录呢?

1
1. cmd   --> net stop mysql (停用MySQL服务  没启动的可以省略)

  1. 找到安装路径 MySQL Server 5.1下的my.ini

  2. 打开 my.ini 找到 [mysqld] 然后在下面加上

这句: skip_grant_tables (意思好像是 启动MySQL服务的时候跳过权限表认证 )

会发现这时无密码就可以登录mysql了。

当然我们还必须修复root账户丢失的数据项。

第一种是因为root账户初始的时候有3条记录,包含root对应localhost,hostname,127.0.0.1三条账户数据,我们可以updatehost为其他两项中一项为localhost即可。

第二种是直接insert一条记录,host为localhost即可

查看一下你的表中user字段用户名是不是root是不是与你连接数据库地用户名一致

  总结一下:即使root的host包含了主机名,127.0.0.1那么依然是无法正常登录的,这里必须要有localhost的host才行。

查看数据库mysql表中的host字段:

发现user表host字段中没有localhost,但是我的理解是%代表所有的主机都能登录的,为什么localhost不能呢,同样的情况我在5.0.45版的mysql上面做实验就不会发生localhost无法登录,我当前用的是5.1.57版的,难道是版本的问题?

接下来的修改很明显了:

1
2
mysql> updateuser set host='localhost' where user='root' and host='%';
mysql> flush privileges;

OK,退出mysql,重启mysql就解决问题了