新手遇到 SSH 隧道和远程 MySQL 访问问题

新手遇到 SSH 隧道和远程 MySQL 访问问题

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

几个月来,我一直在成功使用 HeidiSQL 客户端应用程序。今天发生了两件事:数据库移至新服务器,我更新了 HeidiSQL,现在我无法登录 MySQL 服务器,当我尝试登录时,Heidi 发出了以下消息:

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

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

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

通过谷歌搜索,我发现这可能与 MySQL 绑定地址有关,但我是第三方分包商,无权访问此框的 MySQL 设置,系统管理员向我保证,我是个白痴,需要自己弄清楚。这完全有可能,但我不知道还能尝试什么。

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

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

SSH 主机 + 端口:theHostnameOfTheRemoteServer.com:22 {这是我可以通过 Putty 连接到的同一主机}

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

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

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

MySQL 主机:theHostnameOfTheRemoteServer.com {大家似乎一致认为我应该在这里使用“localhost”}

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

MySQL 密码:mySQLpassword {与 Putty 一起使用一次}

港口:3306

答案1

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

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

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

SHOW GRANTS FOR 'username'@'ipaddress';

如果上述查询未获得任何有效结果,则需要向尝试远程连接的 IP 地址上的用户授予访问权限。您可以通过运行类似下面的查询来执行此操作。

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

另外,请确保您连接到 中设置的正确端口。如果中/etc/my.cnf未明确设置,则使用 的默认端口。您还可以通过运行以下查询在 MySQL 命令行中检查 MySQL 正在运行的端口。port=my.cnf3306

SHOW VARIABLES LIKE 'port';

答案2

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

将 heidi 配置中的服务器地址替换为您在 shell 中输入到 putty 客户端的 IP 地址或主机名。

系统管理员向我保证,我是个白痴,需要自己想办法解决

1o1

答案3

您确定已正确配置客户端以指向新服务器吗?基于以下错误:

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

...

从您的主机到 localhost:3306 的服务器

看来您正在尝试连接到本地计算机(又名 localhost)上的 mysql,而不是新服务器。如果您在本地安装了 mysql CLI 客户端,则可以使用以下命令测试我的理论:

mysql -h 新服务器名称 -u 我的用户名

如果成功,系统会提示您输入密码。然后返回 GUI 客户端并检查您的配置设置。

否则,请确保您可以访问主机,并且 mysql 实际上正在监听该主机上的端口 3306:

ping -c 4 新服务器名称

telnet 新服务器名称 3306

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

如果主机在那里,但您无法远程登录到 3306,则该端口受到限制或服务未运行。再次与友好的同事核实。好极了!

答案4

尝试按以下方式更改您的设置:

...

本地端口:3307

MySQL 主机:本地主机

...

港口:3306

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

相关内容