我最近在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服务器。关于为什么我的网站也不能连接,有什么想法吗?
提前感谢您的任何见解。
由于我可以判断您的服务器肯定在运行(并且通常在互联网上可见),因此有几种可能性:
- 您忘记运行
FLUSH PRIVILEGES
- 您的用户名或密码错误
- 您的免费主机提供商正在阻止连接
我的钱在第三位,有很多激励措施。
@Chris提到您的提供商可能正在阻止端口3306上的出站请求。这里有一个快速的方法来检查是否是这种情况并绕过它:
-
将您的路由器配置为从路由器上的端口80转发到机箱上的端口3306。这将允许您从网络外部的端口80而不是端口3306连接到MySQL。
-
更改您的PHP代码以连接到您的IP端口80,而不是3306。
你的主机提供商可能会阻止出站端口3306,但几乎可以肯定的是,他们不会阻止出站80请求(很多人使用CURL或web服务等)。
好吧,我会告诉你我学到的一个小技巧,你所要做的就是进入wamp>mysql>my.ini
,用3305
替换所有3306
,然后保存,然后将其应用于防火墙和端口转发3305
。然后,当你远程连接时,只需进行
mysql_connect("ip adress:3305", "username", "password");
我已经测试过了,它之所以有效,是因为网络托管网站阻止了来自3306端口的传入流量。