使用mysql连接远程服务器时报错,在百度和google查找都没有找到能解决问题的办法:
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
分析应该是以下两个原因导致的:
- 服务器有防火墙,禁止3306端口的访问。
- 用户没有授权远程访问。
第二个错误首先被排除掉了,根据多年的经验来看,如果是没有权限报错应该是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;
此处评论已关闭