还有另一个"在读取初始通信数据包时错误地连接到mysql服务器,系统错误:0"问题

时间:2015-04-05 21:54:21

标签: mysql linux

这似乎是一个重复的帖子,但我检查了相关帖子中发布的所有解决方案,但没有一个适合我。因此,请允许我更准确地说明问题。

我有一台安装了MySQL的服务器。我有一个用户X,密码为P.

如果我连接到服务器(ssh或其他东西)并尝试在本地运行MySQL(mysql --user=X --password==P),它会完美登录,我可以访问所有内容:

    mysql> show grants;
    ...
    +------------------------------------------------------+
    | GRANT ALL PRIVILEGES ON *.* TO 'X'@'%' IDENTIFIED BY |
    |PASSWORD 'somehash' WITH GRANT OPTION                 |
    +------------------------------------------------------+

现在,如果我转到配置文件:(sudo vim /etc/mysql/my.cnf),我会看到以下内容:

bind-address = 0.0.0.0
port = 3306

然后我转到主机允许文件(sudo vim /etc/hosts.allow)我看到了:

mysqld: ALL

然后我转到主机允许文件(sudo vim /etc/hosts.deny):文件为空(除了一些注释)。

但是,当我尝试连接MySQL工作台时,我遇到了问题。 我就是这样做的。我去添加一个新的连接,我添加了URL,用户名,密码和端口,然后我点击测试连接,我收到了这个问题标题的消息。我尝试使用随机(不存在的)用户传递组合,但仍然得到相同的响应。

我试着将绑定地址注释掉BTW。此外,服务器通常可以访问其他服务,如PostgreSQL等。

2 个答案:

答案 0 :(得分:1)

不是服务器防火墙问题的解决方案,而是解决方法,因为您可以ssh到数据库服务器:

您可以尝试从mysql服务器到本地计算机的ssh远程端口转发,然后将mysql客户端连接到本地端口。每当我在防火墙后面时,我都会使用这种方法。作为奖励,通过此连接传输的数据也非常安全。

例如,如果您使用

ssh进入远程计算机
ssh hal@remote.machine.com -i ~/.ssh/hal.key

然后您可以像这样设置端口转发:

ssh -L 54321:127.0.0.1:3306 hal@remote.machine.com -i ~/.ssh/hal.key -f -N -M -S ~/.ssh/tunnel_54321_remote_machine_mysql

然后你可以像在本地连接到数据库那样连接数据库(以commanline mysql客户端为例):

mysql -h 127.0.0.1 -P 54321 -u my_user -p my_database

然后应该提示您输入密码。

关闭隧道:

ssh -S ~/.ssh/tunnel_54321_remote_machine_mysql hal@remote.machine.com -i ~/.ssh/hal.key

我首先从postgres docs了解了这个方法。

答案 1 :(得分:0)

这很可能是防火墙问题。

最简单的调试方法是在本地和远程尝试telnet到端口3306上的服务器。如果您正确连接,MySQL将以明文形式发送您可以在telnet中看到的版本字符串。

如果你没有得到那个字符串,那么诸如防火墙之类的东西可能会阻止连接。