【MySQL】ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'new_180423'

问题描述:

       在登录Linux的MySQL时,遇到一个很神奇的问题,执行mysql -u root –p,输入密码后一直提示ERROR 1045 (28000): Access denied for user'root'@'localhost' (using password: YES),上网查了之后基本都是提示修改密码。首先,我记得我之前在安装的时候设置过密码为root,而且在本地用navicat也测试连接过用root连得上;其次,我按照网上的教程重新设置了虚拟机MySQL的密码为123456,也用navicat测试过,确实修改成功了,但是到虚拟机上登录的时候还是报这个错;最后,我在登录要求输密码的时候直接回车居然进入MySQL了。

       在解决不了上述问题后,我直接回车进入MySQL,想尝试create database new_180423创建数据库,结果又报错ERROR 1044 (42000): Access denied for user''@'localhost' to database 'new_180423',又上网查了一通,终于找到了这两个问题的原因所在。

问题原因:

       原来是MySQL数据库的user表里,存在用户名为空的账户即匿名账户,导致登录的时候是虽然用的是root,但实际是匿名登录的,通过错误提示里的''@'localhost'可以看出来。

解决办法:

       因此只需要把user表中的匿名用户删除即可解决这两个问题。

1、# vi /etc/my.cnf

     在[mysqld]块最后面加上skip-grant-tables,这样重启服务后登陆MySQL无需密码,保存退出vim

2、# service mysqld restart

     重启服务

3、# mysql -u root -p

     回车直接进入mysql

4、mysql> use mysql ;

5、mysql>delete from user where user=''; 

     删除用户名为空的用户

6、mysql>flush privileges;

     刷新权限表

7、把第一步中my.cnf文件中加上的那一行去掉,再次重启服务即可。

      删除前的user表:


        删除后的user表:



猜你喜欢

转载自blog.csdn.net/mr_evanchen/article/details/80053700