问题描述

前几天用的mysql8.0.16不知道咋的导致连接数据库出现Host ‘localhost’ is not allowed to connect to this MySQL server。搞了几天也没弄好,百度一大堆彻底删除mysql的方法然后再重装mysql,然后能用了,过了一天又莫名其妙出现同样问题。然后开始找方法。

解决方法

注:以下方法均在管理员身份运行的cmd窗口执行!

方法一:在cmd中进入安装mysql的bin目录下或直接在mysql command命令窗口(一般在开始菜单中)中登陆mysql> mysql -u root -p ,然后再改权限,试下效果:
在这里插入图片描述
我合计着这也叫方法?于是继续找方法。。。。。

方法二:首先在cmd输入net stop mysql关闭mysql服务,然后在mysql的安装目录下找到 my.ini文件,之后用记事本打开,找到[mysqld] 这一行,在它的下面加入语句skip-grant-tables,再次回到cmd转到安装 MySQL的bin目录下,利用mysql -u root -p进入mysql ,密码直接回车跳过,然后巴拉巴拉。。(具体内容百度就出来了,或者跳转https://blog.csdn.net/weixin_40660408/article/details/81197044)

让我来尝试一波!!!
在这里插入图片描述
接着重开一个cmd窗口输入 net start mysql,然后。。。然后我tm直接好家伙,MySQL都直接启动不了,咋个执行后面的?
在这里插入图片描述
后来才知道mysql8.0之后的版本都不支持在my.ini直接加skip-grant-tables,加上就会导致mysql无法启动,5.5版本的用此方法估计得行,具体不清楚。

方法三:这是我自己瞎拼凑的方法,既然8.0之后的版本都不支持在my.ini直接加skip-grant-tables,那必然有方法执行同样的效果,最终找到了。执行此方法前一定恢复方法二中的my.ini文件,去掉skip-grant-tables,然后在cmd执行net start mysql,发现mysql已经正常启动。在这里插入图片描述
接着执行如下语句

mysqld --console --skip-grant-tables --shared-memory

在这里插入图片描述
然后报了一堆错,说什么这个文件必须是有写入权限的,然后在data目录下找到该文件右击属性,把写入权限勾上,点击应用。在这里插入图片描述
再次测试仍旧一样的错误,上百度。。。

1、终止mysqld进程; net stop mysql
2、打开mysql安装目录的data文件夹,删除ib_logfile0和ib_logfile1也 就是ibdata1下面的两个文件
3、重开一个cmd启动mysql并运行上面语句

然后成了,他成了!!!!!!!!!!!在这里插入图片描述
这里我踩坑了,这个窗口不能关,不能关。。
然后再开一个cmd,运行mysql -uroot -p,然后直接两次回车,出息了,熟悉的画面,努力没有白费。
在这里插入图片描述
接下来为了防止这该死的错误再次发生,得改改!

1.为了让所有主机包括localhost连接到mysql,使用%替换localhost,然后flush privileges,反复多刷几次,如果不成功一直刷,刷到成功为止。

update user set host = '%' where user = 'root';
flush privileges;

在这里插入图片描述

2.修改密码,用1或者代码的方法,3是其他帖子看的,不要用3,不然会失败。然后再flush privileges,反复多刷几次,如果不成功一直刷,刷到成功为止。

1. set password for root@'%' = '123456';
2. update user set authentication_string='123456' where user='root';
3. set password for root@'%'= password('123456');

在这里插入图片描述

3.查询user表

select host, user from user;

在这里插入图片描述

注:以上步骤1和2顺序不能颠倒,否则报错

大功告成,开始happy!!!

方法四:有点暴力重装的意味,不过要简略的多,适用于方法三删除ib_logfile0和ib_logfile1文件后仍旧报错的铁子们,要先备份好数据库,因为要删库,有一说一,除了mysqldump我不知道还有什么备份方法,没学过。方法三失败的情况下mysqldump无法备份的。我试过直接复制data目录下的数据库文件夹先保存,再删除整个data文件夹,等操作完成后再把数据库文件夹放回data目录,但是navicat加载不出来。 查资料该方式必须确保原数据库和待还原的数据库主版本号一致,并且只适用于MyISAM引擎的表,而我用的是INNODB。不废话了,上“才艺”!

1.先关闭mysql,net stop mysql。再删除data文件夹,忘了说data是数据库的数据的存放目录默认在mysql的安装路径里就能看到,和bin目录同级。不知道的去mysql里的my.ini文件找。
在这里插入图片描述
2.初始化数据库并生成一个无密码的账号,initialize初始化,insecure密码为空,不加的话就会随机生成一个密码。

mysqld --initialize-insecure

出现如下界面则代表初始化成功,通过日志也可以发现已经生成一个无密码的账号
在这里插入图片描述
查看后台日志
在这里插入图片描述
3.然后net start mysql,后面步骤就和方法三失败的地方之后一样了。在这里插入图片描述

总结

这次经历可真是费神,踩坑无数,几天就耗在这上面。不过还是涨了见识,薄弱的mysql知识又增加了yi点点。我是先发现方法四再发现方法三的,好在我之前设置了数据库定时自动备份,搞完之后恢复了数据库,依旧是精神小伙。不过我还是很疑惑为什么我自己电脑连接本地mysql会报这个错,也不是远程连接,希望有大神能解答一下,感谢。

总总结

写了一个windows下实现mysql数据库定时自动备份
祝愿各位铁子别踩坑了!

附录

顺带送上一个自用的my.ini

[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=B:\\environment\\MySql\\mysql-8.0.11-winx64   # 切记此处一定要用双斜杠\\,单斜杠我这里会出错,不过看别人的教程,有的是单斜杠。自己尝试吧
# 设置mysql数据库的数据的存放目录
datadir=B:\\environment\\MySql\\mysql-8.0.11-winx64\\Data   # 此处同上
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8

我的mysql安装目录长这样
在这里插入图片描述

Logo

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

更多推荐