错误现象:
Lost connection to MySQL server at 'reading initial communication packet', system error: 0
或者Lost connection to MySQL server at ' handshake:reading initial communication packet', system error: 2
ssh方式连接mysql 错误错误回顾:AWS有一EC2主机A,自己搭建mysql服务器,ssh密钥方式连接A主机没有问题,sqlyog直连A主机的mysql 3306没问题,其他B主机mysql直连A的3306没问题。sqlyog用ssh方式连接A主机mysql不行,报错,提示如上。
先是怀疑亚马逊云上有限制,但是根据上面现象排除。限制也只能限制3306端口不能外连。
网上查了一圈,做如下:
1、有人说,在mysqld启动的时候加入skip-name-resolve,配置my.cnf中有,没用。。。
2、又有人说,需要在/etc/hosts.allow里加上mysqld:allow,这个我知道,我的没有限制,我没有动。
3、有人说监听地址不对,在配置文件中my.cnf添加 bind-address = 0.0.0.0后,问题依旧,其实不用添加,默认是ipv4和ipv6所有
一般到这,基本上能解决这个问题了,但是我没有解决。
不服,继续查找。
思路整理,我的ssh方式没有问题,数据库直接连3306端口没有问题(暴露3306端口不安全,所以必须要用ssh方式),那也就是,ssh连接转发mysql的tcp连接时出现了这个问题。
再查:
终于出来了,如果让服务器支持sqlyog的ssh方式,sshd服务需要有一下配置:
/etc/ssh/sshd_config
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
AllowTcpForwarding yes
我的配置中AllowTcpForwarding no。
no,no,no。折磨我一天。撒花 解决!
最大感想: 遇到问题直接Google,不要baidu!
网友评论