使用PHP连接到远程MySQL服务器

时间:2009-12-20 09:02:02

标签: php mysql mysql-connect remote-server mysql-error-2002

我正在尝试使用以下代码从本地计算机虚拟主机连接到远程MySQL服务器:

$conn = mysql_connect("$dbhost", "$dbuser", "$dbpass") or die(mysql_error());
        mysql_select_db($dbname, $conn) or die(mysql_error());

我的问题是我无法在本地连接,收到错误:

  

无法连接到'xxx.xxx.xxx.xxx'(10060)

上的MySQL服务器

当我将相同的PHP文件上传到服务器时,情况并非如此。我可以毫无问题地查询数据库。

我也无法通过命令行连接,但我可以访问cPanel,它排除了我的IP被意外禁止的可能性。

我的本​​地服务器正在运行PHP 5.2.9,即远程服务器5.2.12

4 个答案:

答案 0 :(得分:18)

  • 必须设置服务器的防火墙以启用端口3306上的连接
  • 您必须让MySQL中的用户可以从%(任何主机)进行连接(有关详细信息,请参阅manual

目前的问题是第一个问题,但在您解决问题之后,您可能会得到第二个问题。

答案 1 :(得分:3)

使用PHP连接远程MySQL服务器非常容易,您需要做的是:

  1. 在远程服务器中创建MySQL用户。

  2. 为用户授予完全权限。

  3. 使用PHP代码连接到服务器(下面给出的示例)

  4. $link = mysql_connect('your_my_sql_servername or IP Address', 'new_user_which_u_created', 'password');
    if (!$link) {
        die('Could not connect: ' . mysql_error());
    }
    
    echo 'Connected successfully';
    
    mysql_select_db('sandsbtob',$link) or die ("could not open db".mysql_error());
    // we connect to localhost at port 3306
    

答案 2 :(得分:2)

我刚刚解决了这个问题。 我学到的是:

  1. 您必须修改my.cnf并在bind-address = your.mysql.server.address
  2. 下设置[mysqld]
  3. 评论跳过网络领域
  4. 重启mysqld
  5. 检查它是否正在运行

    mysql -u root -h your.mysql.server.address –p 
    
  6. 使用%作为域创建用户(usr或任何其他内容),并授予她对相关数据库的访问权限。

    mysql> CREATE USER 'usr'@'%' IDENTIFIED BY 'some_pass';
    mysql> GRANT ALL PRIVILEGES ON testDb.* TO 'monty'@'%' WITH GRANT OPTION;
    
  7. 为端口3306打开防火墙(你可以使用iptables。确保打开端口以便进行复制,或者如果你是安全的,那么只允许客户端地址)

  8. 重新启动firewall / iptables
  9. 您现在应该可以从客户端服务器php脚本连接mysql服务器。

答案 3 :(得分:0)

这可能不是海报问题的答案。但这可能对那些面对我的人有所帮助:

客户端有两个网卡,一个是无线网卡,另一个是普通网卡。 ping到服务器可以成功。但是telnet serverAddress 3306会失败。 并会抱怨

  

无法连接到'xxx.xxx.xxx.xxx'(10060)

上的MySQL服务器

当尝试连接到服务器时。所以我禁止正常的网络适配器。 并尝试telnet serverAddress 3306它的工作原理。然后它连接到MySQL服务器时工作。