PHP 代码
我有一个开发环境,正在尝试访问远程数据库。这是我使用的代码:
$dbhost = '127.0.0.1:3307';
$dbuser = 'mydbuser';
$dbpassword = 'mydbpassword';
$dbdatabase = 'mydatabase';
$db=mysql_connect($dbhost, $dbuser, $dbpassword);
mysql_select_db($dbdatabase, $db);
我收到此错误:
[error] [client 127.0.0.1] PHP Warning: mysql_connect(): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
壳
为了使其正常工作,我尝试从我的常规用户帐户(jzumbrum)进行 SSH,如下所示:
ssh -f -L 3307:localhost:3306 [email protected] sleep 10 >> /var/log/apache2/sshlog
问题
有哪些命令可以验证 ssh 端口绑定是否正确工作?
答案1
您的 PHP 消息表明您正在尝试通过 unix 套接字连接到 MySQL,而不是通过本地主机接口上的网络。请再次检查您的配置。
你可以打开另一个终端并执行 来检查你的 SSH 端口转发telnet localhost 3307
。如果隧道已启动,你应该会得到某种响应。
答案2
该错误消息表明 PHP 仍在尝试通过套接字而不是网络连接。除非您解决此问题,否则 SSH 解决方案将无法工作,因为它依赖于通过网络连接。
PHP 这样做的原因有很多,包括“SQL 安全模式”和 PHP MySQL 库覆盖某些默认值(如“localhost”)。其中一些记录在mysql_connect() 手册页。
我在代码中看到的最大问题是您尝试连接到 MySQL,127.0.0.1
但使用 SSH 连接到remoteserver.com
。您的 $dbhost 行可能应该用remoteserver.com
而不是127.0.0.1
。
答案3
我通常会做这样的事情来验证端口转发是否有效:
在远程机器(使用远程数据库)上执行简单服务器:
remote$ echo "hello" | nc -l -p 2222
在本地机器上启动端口转发:
local$ ssh -L 1234:localhost:2222 [email protected]
并尝试连接到简单服务器:
local$ nc localhost 1234
如果您看到“hello”,则表示端口转发按预期工作。