这似乎是一个重复的帖子,但我检查了相关帖子中发布的所有解决方案,但没有一个适合我。因此,请允许我更准确地说明问题。
我有一台安装了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等。
答案 0 :(得分:1)
您可以尝试从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中看到的版本字符串。
如果你没有得到那个字符串,那么诸如防火墙之类的东西可能会阻止连接。