网站连接到本地MySQL服务器


Website Connection to Local MySQL Server

我最近在Windows家用电脑上配置了一个MySQL服务器。此外,我还使用0fees.net-一个免费的托管提供商创建了一个网站,它附带了一个vista面板,提供各种服务,包括PHP支持、FTP文件托管、自己的MySQL服务器等。

对于那个网站,我创建了一个"登录"PHP脚本,以便人们登录我的网页。然而,我不想从0fees.net上的cPanel上给我的MySQL数据库中读取,而是希望PHP登录脚本直接从我在家用电脑上配置的MySQL服务器中读取。为此,我采取了几个步骤:

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

在该配置中,我在端口3306上启用了TCP/IP网络(并为该端口启用了防火墙例外),并启用了从远程机器进行的根访问。

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. 您忘记运行FLUSH PRIVILEGES
  2. 您的用户名或密码错误
  3. 您的免费主机提供商正在阻止连接

我的钱在第三位,有很多激励措施。

@Chris提到您的提供商可能正在阻止端口3306上的出站请求。这里有一个快速的方法来检查是否是这种情况并绕过它:

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

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

你的主机提供商可能会阻止出站端口3306,但几乎可以肯定的是,他们不会阻止出站80请求(很多人使用CURL或web服务等)。

好吧,我会告诉你我学到的一个小技巧,你所要做的就是进入wamp>mysql>my.ini,用3305替换所有3306,然后保存,然后将其应用于防火墙和端口转发3305。然后,当你远程连接时,只需进行

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

我已经测试过了,它之所以有效,是因为网络托管网站阻止了来自3306端口的传入流量。