通过SSH ERROR 2013连接到MySQL(HY000)

时间:2014-08-24 03:53:33

标签: mysql database ssh mediatemple

设置

我目前正在使用MediaTemple提供的Premium Wordpress主机。我有一个非常大的数据集要导入,我希望通过SSH隧道直接访问数据库。

---------------                      -------------------               ------------
| My Machine  | ---- SSH TUNNEL -----| Hosting Server  | -- -- ? -- -- | Database |
---------------                      -------------------               ------------

什么有用

如果我进入Hosting ServerHosting Provider上的 shell,连接到这样的mysql,我就能进入MySQL。

mysql -uuser -ppassword -h123.456.789.1 -P3308

什么不起作用

但是,如果我尝试使用-L标志用SSH连接到MySQL以创建隧道,我将无法连接到服务器。

 ssh me@hostingserver.net  -L 7002:123.456.789.1:3308

来自 My Machine上的shell:

 mysql -uuser -ppassword -h127.0.0.1 -P7002

我收到以下错误:

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

通过阅读其他答案(StackOverflow StackOverflow),我推断该问题源于MySQL客户端尝试绑定的IP地址。我认为连接请求的IP地址附加在我的机器上执行时,不在Database Server的白名单上。

无论如何都可以从My Machine直接访问MySQL数据库。从系统管理的角度来看,我有足够的访问权限从shell连接到MySQL数据库但我无法在My Machine上运行客户端。我有一个非常大的数据集,我想从My Machine转移到Database。我还希望能够在需要时访问数据库并exicute SQL。这个和大数据集类型消除了在source上使用来自MySQL客户端的Hosting Server命令的可能性。什么是最好的解决方法,让我能够在Database My Machine上运行SQL?

1 个答案:

答案 0 :(得分:1)

我遇到了大致相同的问题。也就是说,即使我已成功通过隧道连接到远程主机,我也无法连接到MySQL服务器。

TLDR:这是涉及环回接口的iptables问题

在我的情况下,mysqldsshd在同一个VPS上运行。但是,MySQL实例仅绑定到127.0.0.1并侦听默认端口。正如您所做的那样,我确认可以使用本地使用的凭据连接到远程计算机上的mysqld实例。

这是隧道:

ssh -v -N -L 33306:127.0.0.1:3306 sshuser@sshanddbvps.org

以下是使用mysqld客户端的mysql实例的连接字符串:

mysql -umysqluser -h127.0.0.1 -P 33306 -p

即使ssh表示连接成功......

debug1: Connection to port 33306 forwarding to 127.0.0.1 port 3306 requested.

...使用您提到的消息接受正确的密码后,mysql客户端连接会出错:

ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet'...

要检查数据是否在loopback接口上流动,我登录到远程服务器并在三个单独的shell中运行了三个命令:

  1. while true; do echo -e "HTTP/1.1 200 OK\n\n $(date)" | nc -l 127.0.0.1 1234; done
  2. tcpdump -i lo src 127.0.0.1 -or dst 127.0.0.1
  3. nc 127.0.0.1 1234
  4. 运行第三个命令后,第二个命令的输出出现了:

    13:59:14.474552 IP localhost.36146 > localhost.1234: Flags [S], seq 1149798272, win 43690, options [mss 65495,sackOK,TS val 48523264 ecr 0,nop,wscale 7], length 0

    但没有任何迹象表明数据包正在反向流动。

    在允许来自默认环回地址的流量的防火墙的INPUT链中插入规则解决了这个问题:

    iptables -I INPUT 4 -i lo -s 127.0.0.1 -j ACCEPT