我并不经常使用 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.cnf
3306
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,但我认为它会通过隧道连接到远程服务器上的默认端口