(1)如果是最后的提示是NO则说明当前数据的登录需要使用密码,而此次登录时并没有使用密码登录,只需进行密码登录。

(2)如果使用密码登录时,报错YES,则说明当前用户的密码字段或者Host字段出现问题,则可先通过绕过密码的方式进行登录查看登录用户信息。

绕过密码登录

(1)如果mysql的版本是5.7以下,则直接在/etc文件夹下找到my.cnf,然后在[mysqld]字段下添加一行skip-grant-tables,保存完重启数据库,然后就可以直接使用mysql免密登录数据库。

(2)如果mysql的版本是5.7以上,在/etc文件夹下是找不到my.cnf文件的,所以只需要新建一个my.cnf,然后添加两行代码

[mysqld]

skip-grant-tables

保存完重启数据库,然后就可以直接使用mysql免密登录数据库。

修改用户密码

(1)免密登录之后,use mysql切换数据库,然后依次执行

update user set authentication_string = PASSWORD('new password') where User = 'username';

FLUSH PRIVILEGES;

第一句sql指令如果数据库版本低于5.7时,user表中的密码字段应该是password,所以需要将指令修改为

update user set password = PASSWORD('new password') where User = 'username';

(2)修改之后可以通过sql指令查看当前用户信息

Select Host, authentication_string from user where User = ‘username’;

此处需要特别说明,该表中的Host字段指示的是当前登录数据用户的主机ip,比如说Host字段中是localhost,那如果想登录数据库,则只能是本机登录,所以在做开发时需要将数据库的地址设置为localhost,如果想要远程访问,可以将Host改为想要进行访问的主机的ip地址即可。(192.168.1.% 该表达式可以匹配所有子网为192.168.1.xxxx的所有ip)

所以如果Host不是localhost,就算密码修改成功之后,也无法在本机进行登录,所以再测试的时候还会报错ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

(3)修改完通过quit退出数据库,将my.cnf文件中新增的代码去掉,然后

service mysql restart

重启数据库,即可正常通过密码登录数据库。

一定一定一定要检查数据库用户的Host字段,因为它直接决定哪些主机可以通过当前数据库用户进行登录!!!!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐