使用mysql连接远程服务器时报错,在百度和google查找都没有找到能解决问题的办法:

ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0

分析应该是以下两个原因导致的:

  1. 服务器有防火墙,禁止3306端口的访问。
  2. 用户没有授权远程访问。

第二个错误首先被排除掉了,根据多年的经验来看,如果是没有权限报错应该是Access Deny或者Permission相关的错误,但是这个错误从没见过。

因此排查的重心就放在了防火墙上了,首先在服务端查看防火墙,防火墙是关闭的状态,并且3306端口允许所有主机访问:

说明不是第一种场景导致的。那么问题来了,这到底是个什么奇葩错误?没办法,只能上终极大招了——抓包。

使用tcpdump抓包:

tcpdump -i eth0 host 192.168.123.17 and tcp port 3306 -nnv -c 100 -w 3306.pcap

然后放到本地用wireshark打开,一个明显的错误就映在眼前了:

1130,没有权限访问,说明还是用户没有权限访问服务器导致:

气到吐血!不知道为什么没有权限客户端是这种鬼错误,直接打印服务端返回来的错误不就行了吗?wtf!

这是一台内网的虚拟机设备,root用户没有开外网访问权限,很久没有使用了不记得了。

解决办法

给root权限加上外网访问权限:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
最后修改:2020 年 02 月 29 日
如果觉得我的文章对你有用,请随意赞赏