ERROR 2013 (HY000) Lost connection to MySQL server at ‘reading authorization packet’,
原因:
1.检查IPV4和IPV6优先级问题;
在windows中IPV6的权限先IPV4网络,可以通过cmd运行符查看:
在cmd中ping localhost解析出来的是IPV6的::1,原因是windows有个优先解析列表,当ipv6的优先级高于ipv4时,就会出现这种情况。网上有一种方法是修改注册表的,具体方法为:打开RegEdit,导航到HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ tcpip6 \ Parameters, 创建DisabledComponents DWORD注册表值,将其值设置为20(十六进制),然后重启电脑。这种方法我试了,还是没能解决。
查看IPV6优先级:
C:\Users\LOVO> netsh interface ipv6 show prefixpolicies
查询活动状态...
优先顺序 标签 前缀
---------- ----- --------------------------------
50 0 ::1/128
40 1 ::/0
35 2 ::ffff:0:0/96
30 4 2002::/16
10 5 2001::/32
5 13 fc00::/7
3 11 fec0::/10
1 12 3ffe::/16
1 3 ::/96
请注意,IPv6地址(:: / 0)优先于IPv4地址(:: / 96,:: ffff:0:0/96),因此我们可以制定策略,使IPv6不会比任何IPv4地址有利。其中,标签表示优先级,0表示优先级最高,依次类推
- 定制策略,命令提示符(管理员方式运行)中执行下列命令:
C:\Windows\System32>netsh int ipv6 set prefix ::/96 50 0
确定
C:\Windows\System32>netsh int ipv6 set prefix ::ffff:0:0/96 40 1
确定
C:\Windows\System32>netsh int ipv6 set prefix 2002::/16 35 2
确定
C:\Windows\System32>netsh int ipv6 set prefix 2001::/32 30 3
确定
C:\Windows\System32>netsh int ipv6 set prefix ::1/128 10 4
确定
C:\Windows\System32>netsh int ipv6 set prefix ::/0 5 5
确定
C:\Windows\System32>netsh int ipv6 set prefix fc00::/7 3 13
确定
C:\Windows\System32>netsh int ipv6 set prefix fec0::/10 1 11
确定
C:\Windows\System32>netsh int ipv6 set prefix 3ffe::/16 1 12
确定
查看优先级 netsh interface ipv6 show prefixpolicies:
C:\Users\LOVO>netsh interface ipv6 show prefixpolicies
查询活动状态...
优先顺序 标签 前缀
---------- ----- --------------------------------
50 0 ::/96
40 1 ::ffff:0:0/96
35 2 2002::/16
30 3 2001::/32
10 4 ::1/128
5 5 ::/0
3 13 fc00::/7
1 12 3ffe::/16
1 11 fec0::/10
ping 主机名:
C:\Users\test>ping localhost
正在 Ping localhost[127.0.0.1] 具有 32 字节的数据:
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=128
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=128
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=128
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=128
127.0.0.1 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 0ms,平均 = 0ms
完成!
原文连接:https://blog.csdn.net/ambertian/article/details/70238020
2.Mysql数据库授权权限登录问题;
Linux登录到Mysql中
shell> mysql -u root -p
登录到Mysql中的表:
mysql> use mysql;
创建用户root授权权限:
#此处给127.0.0.1地址远程访问权限,也可可以增加多行localhost;
mysql> CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY '123';
#为root用户提供所有计算机远程连接访问权限;
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123';
#或
mysql> CREATE USER 'root'@'%' IDENTIFIED BY '123';
查看表名,得到如图:
最后刷新权限,退出数据库:
mysql> flush privileges;
mysql> quit;
重新启动数据库:
shell> service mysqld restart
(Ps:授权中可能存在因为/etc/my.cnf文件设置在{mysqld}下skip-grant-tables跳过了验证权限,无法创建用户,可以进入删除改行;
shell> vi /etc/my.cnf
找到该行并进行删除。
3.Mysql中my.cnf中DNS解析问题;
可以通过对/etc/my.cnf文件设置在{mysqld}下skip-name-resolve,skip-name-resolve是禁用dns解析,所以在mysql的授权表中就不能使用主机名了,只能使用IP。
shell> vi /etc/my.cnf
在{mysqld}下加入:
skip-name-resolve
4.其他问题
- 以上都无法解决可以考虑防火墙端口,尝试关闭防火墙;
- SSH_PORT中端口问题没有开放;
- 还有就是my.cnf中bind-address=127.0.0.1尝试注释掉该行或改成0.0.0.0;
- Mysql版本向低版本运行内存不足问题:原文
- 测试连接成功,重启Navicat;