一、问题描述
用密码都是可以连接的。之前也是可以连接mysql,突然在大数据量的操作时就报错了。
这个原因很难说,我的原因是协议优先级的问题,也是数据大的问题。
二、解决方法
打开cmd,输入ping localhost
显示的一个【::1】在传输数据。这是因为你的电脑优先使用了ipv6来解析localhost。只有用ipv4的时候才会解析到127.0.0.1上去。
解决办法:
1、把ipv6协议卸载就行了;
2、设置ipv4和ipv6的优先级:
管理员权限打开cmd
输入命令 netsh interface ipv6 show prefixpolicies
,查询ipv6优先级
请注意,IPv6地址(:: / 0)优先于IPv4地址(:: / 96,:: ffff:0:0/96),因此我们可以制定策略,使IPv6不会比任何IPv4地址有利。其中,标签表示优先级,0表示优先级最高,依次类推。
netsh int ipv6 set prefix ::/96 50 0
netsh int ipv6 set prefix ::ffff:0:0/96 40 1
netsh int ipv6 set prefix ::1/128 10 4
完了后输入命令netsh interface ipv6 show prefixpolicies
查看优先级是否改变。
ping localhost
变为127.0.0.1了,再执行程序,OK!!!
三、其他
我第二天又遇到这个报错,ping localhost 的结果是127.0.0.1。
但是跟之前的区别只是数据量大了而已。于是参考了上上篇博客的报错处理方式。
mysql> show global variables like 'max_allowed_packet';
#修改参数:
mysql> set global max_allowed_packet=1024*1024*16;
mysql> show global variables like 'max_allowed_packet';
运行正常!!!
四、其他解决方法
上网查了不少博客,还有以下几种方法,如果以上两种不行可以尝试:
1.在my.ini中添加skip-name-resolve
2.在hosts文件里添加 127.0.0.1 localhosts 映射
3.重启mysql服务(将其属性改为本地登录)
4.进入mysql修改root权限(这是我最想吐槽的一种方法,我特么都进不去,还要你教这种方法?)
5.彻底卸载mysql,重新安装(且把服务名换成mysql666什么的)
6.修改my.ini里面timeout等参数