2011-06-14 63 views
1

我最近在Windows家庭计算机上配置了一个MySQL服务器。此外,我还创建了一个使用0fees.net的网站 - 一个免费的托管服务提供商,该服务提供商提供了一个包括PHP支持,FTP文件托管,自己的MySQL服务器等各种服务的vista面板。到本地MySQL服务器的网站连接

网站,我已经创建了一个“登录”PHP脚本,以便人们登录到我的网页。但是,我不想从在0fees.net上的cPanel上给予我的MySQL数据库读取数据,而是希望PHP登录脚本直接从我在家用计算机上配置的MySQL服务器读取。要做到这一点,我已经采取了多项措施:

1)使用MySQL服务器实例配置向导

在这种配置中配置MySQL的,我已经启用了TCP/IP网络上的3306端口(并启用了防火墙例外该端口)并启用了远程机器的根访问权限。

2)上的MySQL命令行的客户端,我已经通过使用授予远程访问能力,以其他单位:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password'; 

3)我已经转发端口3306到我的路由器(和已经使用的各种端口检查器确认它是开放的)

4)我创建了名为“login.php”的登录脚本,它位于我的站点的.htdocs目录中,并在我的网站主页上处理HTML登录表单。它尝试(并失败)连接到我的本地MySQL服务器。那PHP脚本的目的片段是:

$host="my_external_ip:3306"; // External IP of my computer and port to listen on 
    $username="root"; // Username specified in the GRANT command-line-client command 
    $password="password"; // Password specified in the GRANT command-line-client command 
    $db_name="logon"; // MySQL database name 
    $tbl_name="accounts"; // Table name within the database 

    // Connect to server and select databse. 
    mysql_connect("$host", "$username", "$password")or die(mysql_error()); 
    mysql_select_db("$db_name")or die("cannot select DB"); 

当试图连接到MySQL割断,我得到一条错误消息:

Can't connect to MySQL server on 'my_external_ip' (4). 

还应当指出的是,我成功能够通过端口3306使用相同的外部IP地址,从其他网络上的其他机器(使用Navicat进行测试)远程连接到本地MySQL服务器。有关我的网站为何无法连接的任何想法?

在此先感谢您的任何见解。

+1

传入流量那么我可以告诉你,你的端口肯定是开并倾听(不良想法张贴你的知识产权就像那样)。 – 2011-06-14 20:30:21

+2

此外,创建一个不同于超级用户的用户来自php的连接是一个很好的习惯......您应该为您的php连接创建一个具有受限特权的新用户 – Damp 2011-06-14 20:33:46

+0

您的站点和本地站点之间是否存在代理? # – 2011-06-14 20:47:57

回答

3

因为我可以告诉你的服务器肯定是(在一般的互联网和可见的)上运行,有以下几种可能:

  1. 你忘了执行FLUSH PRIVILEGES
  2. 您的用户名或密码错误
  3. 你免费主机提供商阻止连接

我的钱是在#3,也有很多优惠措施做到这一点。

+0

#3正是我的想法。 – 2011-06-14 20:35:51

+0

谢谢,现在我正在使用免费的网站托管服务。但是,如果我升级,我可以使用访问主机功能启用远程连接。这会做诡计吗? (假设是原因) – user797967 2011-06-14 20:36:31

+0

@ user797967:你的猜测和我的一样好(可能更好)。我对这个托管服务提供商一无所知。从托管的角度来看,最好让你的客户使用*你的*数据库,因为那样你就可以为每个额外的数据库收取费用(再加上整个安全性方面)。 – 2011-06-14 20:38:37

0

@克里斯提到,你的供应商可能会在端口3306这里有一个快速的方法来检查,如果是这样的话,并避开它会阻止出站请求:

  1. 从80端口配置路由器端口转发在路由器到您的箱子的端口3306。这将允许您从端口80以外的网络连接到MySQL,而不是端口3306。

  2. 更改你的PHP代码连接到您的IP端口80,而不是3306

你的托管服务提供商可能会阻止出站端口3306,但几乎可以肯定不会阻止出站端口80级的请求(很多人使用CURL或Web服务等)。

+0

@Eric Petroelje感谢您的洞察力,但我不确定我完全理解第1步。 – user797967 2011-06-14 20:49:26

+0

@user - 您提到您已将“3306端口转发到我的路由器(并已使用各种端口检查器来确认它是打开)”。这是你需要改变的一步。在你的路由器的端口转发设置中,你需要指定端口80上的连接应该被转发到MySQL盒子上的端口3306(而不是转发3306 - > 3306,现在转发80 - > 3306)。希望清除一下 – 2011-06-14 20:51:45

+0

@Eric Petroelje-是的,非常感谢,我现在就试试 – user797967 2011-06-14 20:54:02

0

好吧,我将让你在一个小窍门我学会了,你要做的就是进入wamp>mysql>my.ini和所有33063305替换然后保存并应用此防火墙和端口转发3305。然后,当你进行远程连接,简单地做

mysql_connect("ip adress:3305", "username", "password"); 

我测试过这一点,它的工作原理,因为网络托管网站阻止端口3306

相关问题