0

我有一台带有一台主机的 Web 服务器,我想在另一台主机上使用数据库。我想使用端口转发来做到这一点,并且已经设置了转发端口使用

ssh -P -fg -L23307:myserver.net:3306 myname@myserver.net sleep 1d

这似乎工作正常(尽管如果有人可以告诉我如何检查,那就太好了),但我无法让 PHP 通过该端口连接到 MySQL - 它一直在尝试连接到自己的本地 MySQL 数据库(没有运行)。

$mlink = mysql_connect( "localhost:23307", "myusername", "mypassword" );
mysql_select_db( 'mydatabase', $mlink ) or die ( "Error - cannot connect to database localhost:23307.<br />Error: ".mysql_error() );  

如您所见,我没有做任何复杂的事情,那为什么它一直尝试在本地连接呢?

4

2 回答 2

1

所以,答案是“当人们说他们已经打开了防火墙上的端口时,不要相信他们”。

有人想要工作吗?

于 2012-01-23T17:33:05.543 回答
0

我遇到了同样的问题。但是没有涉及防火墙问题。事实上,当您使用 SSH 隧道时,您无需更改任何防火墙设置。

我通过在 mysql_connect() 参数列表中将 'localhost' 更改为 '127.0.0.1' 来解决它。参考链接 - https://blog.rjmetrics.com/2009/01/06/php-mysql-and-ssh-tunneling-port-forwarding/

摘录 -

通过 MySQL 连接

是时候看到我们所有的辛勤工作得到回报了。在我们的本地机器上,我们只需发出以下命令:

$mysql -u sqluser -p -h 127.0.0.1 -P 3307

请注意,MySQL 主机是 127.0.0.1,与远程服务器的 my.cnf 文件中的 bind-address 值相同。重要的是我们使用这个值而不是 localhost,因为我们最终访问的是转发的 TCP 端口,并且指定 localhost 会导致 MySQL 完全忽略 TCP 并简单地通过本地套接字连接到本地服务器。因此,请注意我们已指定端口 3307 进行连接;这是我们正在转发的 TCP 端口。

于 2014-12-05T06:48:47.473 回答