Host "localhost " is not allowed to connect to mysql server 解决方法
背景:在一个阴雨绵绵的下午,dunmu来对我说,他数据库的数据蹦了,想要我把数据导给他。我一脸嫌弃的照做了,结果他说他导不进去,报一批按错(默哀,貌似我之前也遇到过 咳咳~).
寻求无果,然后想出连接我本地数据操作的方案,然后就继续,貌似不予许,然后找答案......
傻逼的把mysql数据库下user的root用户的Host字段改成了*, 然后重启一下,呵呵~ Host "localhost " is not allowed to connect to mysql server,连本地就禁用了,,,
解决:通过丢丢时间的纠结和查找,终于找到了个不靠谱的解决方案(我也不知道啊QAQ),,,
首先停止mysql服务:
net stop mysql
然后:
mysqld --skip-grant-tables
另开一个终端,继续
mysqlcheck --check-upgrade --all-databases --auto-repair
然后再输入
mysql
就可以进入MySQL控制台了,无需密码也能进入,,,
注意:结果是数据库被还原了,之前的数据全没了,回到了刚安装MySQL的时候,,, 所以,操作需谨慎啊!!! o.oi
有幸的是,数据库被还原并不代表数据被清除了!
下面才是新发现,介绍一个非常有用的mysql启动参数—— --skip-grant-tables。 顾名思义,就是在启动mysql时不启动grant-tables,授权表。有什么用呢?当然是忘记管理员密码后有用。
如果你忘记了mysql密码几乎是没有什么好办法可以直接修改密码了,但我们可以在my.ini把加上skip-grant-tables,然后重启mysql就不需要密码了,这时我们再修改root密码,最后再把skip-grant-tables注释或删除重启即可。
use mysql; update user set password=password('12345') where user='root'; flush privileges; exit;
新安装,提示无密码时,可以使用语句SET PASSWORD
shell > mysql -uroot -p mysql > mysql > SET PASSWORD = PASSWORD('new pass');
听说 my.ini 加上这句 skip-name-resolve ,远程连接速度会变快,但是也有注意点,mysql.user 表里面的 host 不要用 localhost 之类的,要用IP表示,如127.0.0.1不然连自己都连不上数据库,会报错。