问题现象:
这个问题就让我很恼火,毕竟刚处理完一个:连接Mysql服务器提示:1130-Host XXX is not allowed to connect to this MySQL server的处理方法_yeyuningzi的博客-CSDN博客
然后就又出了这个幺蛾子。。。。废话不多说,我记录一下,这次我的处理步骤
由于这次,我是可以通过远程登录的,于是通过工具远程登录就行:
1、要是用命令列界面工具,则是要跳转一次到mysql库,
use mysql;//跳转到mysql数据库
2、选中mysql库之后,做一个授权:grant all privileges on *.* to 'root'@'172.0.0.1' identified by 'password';
grant all privileges on *.* to 'root'@'172.0.0.1' identified by 'password';
(高版本mysql 的数据库字段不同,是authentication_string,如果字段名不对则会提示:Unknown column 'password' in 'field list')
3、然后flush privileges;使得设置生效
注意:flush privileges;语句很重要,一定不要省略了。
4、本地登录的时候 确认一下:
对于这个:mysql Error 1045(28000):Access denied for user ‘root‘@‘localhost‘(using password:YES)问题 ,我思前想后,可能问题可能出现在这里:
在上一个问题(详见:(13条消息) 连接Mysql服务器提示:1130-Host XXX is not allowed to connect to this MySQL server的处理方法_yeyuningzi的博客-CSDN博客_mysql连接提示1130)处理的时候,最开始没有做任何操作时通过select user,password,host from user;语句查询到的user表信息是这样的:
root用户从host是localhost的地方登录的时候 是有密码的,因此当时是可以通过本地登录。
而host为127.0.0.1的时候,password字段是空的,所以当使用root用户的密码从127.0.0.1登录时,由于数据库里密码字段是空的,所以随便传入的什么样的密码都会因为不匹配,自然而然的不能登录。
在处理那个问题的时候我在更新用户允许登录的客户端情况时使用的是update语句:
执行update查询到的user表信息:
所以当host是127.0.0.1 的时候 是没有密码的!由于当时,我并没有重新本地登录,所以我没有发现这个问题。 当我再次操作的时候这个问题就爆发了。
所以,mysql root用户远程登录的问题应该要考虑到这一点,如果要既能远程登录又能本地登录,那么至少这个user表内容应该是类似这样的:
所以在最初解决root登录问题的时候应该考虑使用这样的语句:
grant all privileges on *.* to 'root'@'%' identified by 'password';
然后再flush privileges;使得设置生效
考虑直接将root用户授权所有的客户端登录或者是根据需要授权给指定IP远程登录
如:grant all privileges on *.* to 'root'@'192.168.0.192' identified by 'password';。
==================================================================================================================================================
处理这个问题的时候,我也参考了其他的资料,其中有一个是说关闭mysql服务之后修改mysql的配置文件my.ini文件,然后再重启服务,
参见:1045-Access denied for user 'root'@'localhost'解决方法 - 吃啥鸭 - 博客园
在这里的时候我踩了个坑,通常情况下如果修改了my.ini文件:
使用了skip_grant_tables这样的设定之后,登录的时候是不验证密码的,也就是可以这样登录:
但是如果是这种情况,在我的环境里 mysql是5.1.36环境下,使用如图里的授权语句 grant all privileges on *.* to 'root'@'%' identified by 'password';这样的语句的时候包报错
Error 1290 (HY000) The MySQL server is running with the --skip-grant-tables option so it cannot excute this statement.
根据报错,使用skip-grant-tables选项时,是不能使用grant 语句授权的 。
所以 这个方式对我来说 行不通。