spring boot程序报 【Lost connection to MySQL server at `reading initial communication packet‘】错误

花费了我1.5天的时间,走了不少弯路终于把这个问题解决了。这个过程真的非常的艰辛,做了无数的尝试,也经历了无数的失败,所幸终于解决了,而在这过程中也学到了一些新的东西,特记录一下!

某天,我像往常一样,在IDEA上敲完一个简单的Spring Boot 程序Demo,启动应用,在浏览器上输入url,回车。期待看到自己预料中的效果,然而网页很不给力的跳到了error页面,唉…这是报错了,我急忙看了下IDEA的控制台,于是看到了标题所示的报错【Lost connection to MySQL server at `reading initial communication packet’】。为了解决这个问题,接下来我进行了长达1.5天的排错 和 心里煎熬。

一开始,我并没有把这个问题当一回事,这种小demo的报错一般百度一下就可以了。但那个时候我首先想到的是程序出错了,觉得有可能是【driverClassName、url、username、password】配置有误。就把[useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC]参数去掉试试,后又把[driver-class-name]由com.mysql.jdbc.Driver改成com.mysql.cj.jdbc.Driver,又认为pom文件的java-connector-mysql的版本有问题改了版本。但这些方法都没有用。

因为用Heidisql连接数据库是没问题的,所以觉得jdbc的url肯定没有问题,这时只能依赖不停的百度了,而百度出来的文章大部分都是两种情况

1、一种是在mysql的my.cnf 文件中 把bind-address=127.0.0.1注释掉,然后加上skip-name-resolves

2、第二种认为是权限不够,要修改权限,flush privileges;

而my.cnf 文件是Linux的mysql配置文件,我却是windows环境。后一番搜索确定windows的mysql配置文件是my.ini,而我的mysql根目录下有my-default.ini文件,于是修改这个文件加上skip-name-resolves。又通过任务管理器,重启了MySQL服务让配置生效。
在这里插入图片描述

但这样改过后根本没用,于是根据文章,觉得可能是防火墙和杀毒软件的问题,但看了防火墙是关闭了,而杀毒软件自己的电脑根本没有。于是重启电脑。然而依旧不行。

接下来我就要确认是不是mysql服务有问题,就开了cmd命令窗口,用mysql -u root -p连接数据库,成功登陆了完全没有问题。并且还在登陆了mysql之后,可以通过show databases;查看数据库,通过show variables like '%skip%';查看配置变量。看了之后感觉都没有问题。于是想到那个ip绑定的问题,就试着用mysql -h 127.0.0.1 -uroot -p连接数据库,这时Error 2013【Lost connection to MySQL server at `reading initial communication packet’】报错就出现了,也是基本可以断定是这个问题跟MySQL有关。
在这里插入图片描述

于是通过net stop mysql;关闭服务,net start mysql;启动服务多次,但报错依旧。而这时我就只想到要看错误日志,通过分析日志来找到问题,并且注意到mysql根目录的data目录下有个DST*****.err文件,于是仔细看了,但发现里面只有我关闭mysql和启动mysql的日志。其他的就没有了。

这时就有点万念俱灰了,能想的办法都尝试了,最后就只能重装mysql了

  1. 首先我备份了数据库,通过mysqldump -u root -p --all-databases备份所有的数据库得到了backdb.sql文件,备份数据库的文章:https://www.cnblogs.com/yourblog/p/10381962.html。
  2. 然后通过net stop mysql停止mysql服务, sc delete mysql删除mysql残留服务,又运行regedit打开注册表删除HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL文件夹,并去“c:\ProgramData\”删除mysql文件夹,然后并未找到。这就算彻底删除mysql了,删除MySQL的文章:https://www.cnblogs.com/diruodaichang/p/10987772.html。
  3. 接下来开始安装Mysql,解压mysql-****.zip文件,再修改my-default.ini配置文件,加了basedir = D:\Tools\Database\Mysql\mysql-5.6.10-winx64 datadir = D:\Tools\Database\Mysql\mysql-5.6.10-winx64\data,然后再mysql的bin目录下,用管理员权限在cmd窗口中执行mysqld -install安装mysql服务,继续执行net start mysql启动mysql服务。这时mysql算安装完成,安装mysql文章:https://www.cnblogs.com/zhangkanghui/p/9613844.html。

但当我执行mysql -h 127.0.0.1 -uroot -p连接数据库时,又报了Lost Connection的错。这时我意识到也不是数据库的问题,因为重新安装一切配置都是新的。我只能重新百度,百度的关键词变成了【mysql error 2013】搜索到都是之前类型的文章,又百度【mysql localhost连接成功,127.0.0.1失败搜出的文章有一篇提到了telnent 可以验证连接是不是通的,于是先打开telnet服务,windows上telnet用法文章:https://jingyan.baidu.com/article/7e44095307db212fc1e2ef4d.html
在这里插入图片描述

然后在cmd中通过 telnet localhost 3306登陆,发现和telnet 127.0.0.1 3306 效果不一样,后者就会失败,这说明127.0.0.1的3306端口是不通的,于是重新百度【telnet localhost成功 127.0.0.1失败】。在看了很多文章之后,有一篇文章提到了用netstat查看端口情况,文章:http://www.51testing.com/html/90/369890-814321.html,于是我就试了试,查了查看windows端口进程的文章:https://www.cnblogs.com/yycc/p/11462648.html,执行了netstat -ano | findstr "3306"查看3306端口的情况,如下所示发现有2个不同的进程占用了3306端口

在这里插入图片描述

通过任务管理器,看到了【pid = 5196】是一个名叫【pc honey pot】的进程。于是在任务管理器中把这个进程停掉了,

然后尝试mysql -h 127.0.0.1 -uroot -p,竟然就成功了,天哪,此时已热泪盈眶。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值