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
题
存在哪些命令来validationssh端口绑定是否正常工作?
您的PHP消息表明您尝试通过unix套接字连接到MySQL,而不是在本地主机接口的networking上。 再次检查您的configuration。
您可以通过打开另一个terminal并执行telnet localhost 3307来检查您的SSH端口转发。 如果隧道启动,你应该得到某种回应。
该错误消息表明,PHP仍然尝试通过套接字而不是通过networking进行连接。 您的SSH解决scheme将无法正常工作,直到您解决此问题,因为它依靠通过networking连接。
PHP可能会这样做的原因有很多,包括“SQL安全模式”和PHP MySQL库,覆盖某些默认值(如“localhost”)。 其中一些在mysql_connect()手册页中有logging 。
我在代码中看到的最大的问题是,您尝试连接到127.0.0.1上的MySQL,但使用SSH到remoteserver.com 。 你的$ dbhost行可能应该有remoteserver.com而不是127.0.0.1 。
我通常做这样的事情来validation端口转发的工作原理:
在远程机器上(使用远程数据库)做简单的服务器:
remote$ echo "hello" | nc -l -p 2222
在本地机器上启动端口转发:
local$ ssh -L 1234:localhost:2222 [email protected]
并尝试连接到简单的服务器:
local$ nc localhost 1234
如果您看到“hello”,意味着端口转发按预期工作。