总有新的SSH隧道和远程MySQL访问问题

我不经常使用linux或需要通过SSH隧道进入远程MySQL数据库,所以请原谅我的无知。 我正在使用Windows 7,需要连接到Linux服务器上的远程MySQL实例。

几个月来,我一直在成功地使用HeidiSQL客户端应用程序。 今天发生了两件事:数据库移动到一个新的服务器,我更新了HeidiSQL,现在我无法login到MySQL服务器,当试图从Heidi得到这个消息:

SQL Error (2003) in statement #0: Can't connect to MySQL server on 'localhost' (10061) 

如果使用Putty,我可以连接到服务器并通过命令行访问MySQL,包括从数据库中获取数据。 我认为这意味着我的凭据和地址是正确的,但不明白为什么将这些相同的细节放入HeidiSQL的SSH隧道信息将无法正常工作。 我也下载了MySQL Workbench,并尝试通过该客户端build立连接,并得到以下消息:

 Cannot Connect to Database Server Your connection attempt failed for user 'myusername' from your host to server at localhost:3306: Lost connection to MySQL server at 'reading initial communication packet', system error: 0 Please: 1 Check that mysql is running on server localhost 2 Check that mysql is running on port 3306 (note: 3306 is the default, but this can be changed) 3 Check the myusername has rights to connect to localhost from your address (mysql rights define what clients can connect to the server and from which machines) 4 Make sure you are both providing a password if needed and using the correct password for localhost connecting from the host address you're connecting from 

从谷歌search我看到它可能与MySQL的绑定地址相关,但我是第三方分包商没有访问这个盒子的MySQL设置和系统pipe理员向我保证,我是一个白痴和需要弄清楚我的结果。 这是完全可能的,但我不知道还有什么要尝试。

编辑1 – 我正在使用的客户端设置

在Heidi和MySQL Workbench中,我使用了以下内容:

SSH主机+端口: theHostnameOfTheRemoteServer.com : 22 {这是同一个主机我可以腻子}

SSH用户名: mySSHusername {用于我的Putty连接的相同用户名}

SSH密码: mySSHpassword {与Putty连接相同的密码}

本地端口: 3307 {这是在SSH设置选项卡上,默认为3307 Heidi,将其更改为3306给我一个不同的错误:语句#0中的SQL错误(1045):访问拒绝用户'mySQLusername'@'localhost '(使用密码:是)“}

MySQL的主机: thehosthostOffTheRemoteServer.com {共识似乎是我应该在这里使用'localhost'}

MySQL用户: mySQLusername {我可以用Putty连接一次}

MySQL密码: mySQLpassword {与Putty一起工作}

港口: 3306

首先,确保[mysqld]下的/etc/my.confbind-address=被设置为新的服务器IP地址。

其次,您需要确保您的用户仍然可以通过您试图从远程连接的任何IP地址远程连接到MySQL。

从MySQL命令行运行以下查询,其中“username”是您尝试login的用户名,“ipaddress”是您尝试连接的IP地址。

SHOW GRANTS FOR 'username'@'ipaddress';

如果您没有从上述查询中得到任何有效的结果,那么您需要在您试图远程连接的IP地址上向您的用户授予访问权限。 您可以通过运行下面的查询来完成此操作。

GRANT ALL PRIVILGES TO 'username'@'ipaddress' IDENTIFIED BY 'yourpassword';

另外,请确保您连接到/etc/my.cnf设置的正确端口。 如果它不是由my.cnfport=明确设置,那么它使用默认端口3306 。 您还可以通过运行下面的查询来检查MySQL命令行上运行MySQL的端口。

SHOW VARIABLES LIKE 'port';

你的heidi mysql客户端试图连接到“localhost”,而不是远程mysq。

将heidi config中的服务器地址replace为您在shell中input的putty客户端的IP地址或主机名。

系统pipe理员向我保证,我是一个白痴,需要在我的结尾弄清楚

1O1

你确定你已经正确configuration你的客户端指向新的服务器? 基于这些错误:

无法连接到'localhost'上的MySQL服务器

从主机到localhost:3306的服务器

它似乎你试图连接到本地机器上的MySQL(又名本地主机),而不是新的服务器。 如果你有本地安装的mysql CLI客户端,你可以用这个testing我的理论:

mysql -h newservername -u myusername

如果有效,系统会提示您input密码。 然后返回到您的GUI客户端并检查您的configuration设置。

否则,请确保您可以访问主机,而且mysql实际上是在该主机上的端口3306上进行侦听:

ping -c 4 newservername

telnet newservername 3306

如果ping失败,请检查您的友好系统pipe理员以确认1)主机已启动,并且2)ICMP数据包未被阻止。 ping可能由于防火墙规则而失败。

如果主机在那里,但是你不能telnet到3306,那么那个端口是受限制的或服务没有运行。 再次,与一个友好的同事核实。 HTH!

你在SSH中的MySQL主机是localhost。 所以这:

MySQL主机: theHostnameOfTheRemoteServer.com

应该是这样的:

MySQL主机: localhost

记住,当你将SSH隧道连接到任何东西时,远程主机只是初始SSH连接的一个因素。 过去,你基本上是在服务器上,所以你现在已经可以连接到“本地主机”了。

编辑:此外,我不明白是什么值设置本地端口到3307是:

本地端口: 3307

这应该是3306,除非在某些地方明确地改变。

本地端口: 3306

如果使用3306而不是3307,可以获得连接但是出现证书错误,则比以前更接近login! 此外,有些情况下我不能通过localhost连接到MySQL出于奇怪的原因,所以我会连接到IP地址127.0.0.1

MySQL主机: 127.0.0.1

试试看看会发生什么。

尝试以这种方式更改您的设置:

本地端口 :3307

MySQL主机 :localhost

港口 :3306

使用非标准端口,如果你正在本地机器上运行一个MySQL实例,我们确信你没有连接到它。 我不知道HeidiSQL,但我认为它会隧道到远程服务器上的默认端口

所以,在这种情况下,我能够让系统pipe理员返回并进行重复检查,毕竟事实certificate这是权限,但是我衷心感谢所有帮助我排除自己的故障排除的人,所以我可以相当有信心地回到他身上问题不在我的最后。