11

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

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

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

无法连接到“xxx.xxx.xxx.xxx”上的 MySQL 服务器 (10060)

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

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

我的本地服务器运行的是 PHP 5.2.9,远程服务器运行的是 5.2.12

4

4 回答 4

18
  • 必须设置服务器的防火墙以启用端口 3306 上的传入连接
  • 您必须在 MySQL 中有一个允许从%(任何主机)连接的用户(有关详细信息,请参阅手册

当前的问题是第一个问题,但在您解决它之后,您很可能会遇到第二个问题。

于 2009-12-20T09:03:56.130 回答
3

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

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

  2. 授予用户完全权限。

  3. 使用 PHP 代码连接到服务器(示例如下)

$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
于 2011-10-14T10:27:39.130 回答
2

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

  1. 您必须编辑并my.cnf设置bind-address = your.mysql.server.address[mysqld]
  2. 注释掉跳过网络字段
  3. 重启mysqld
  4. 检查它是否正在运行

    mysql -u root -h your.mysql.server.address –p 
    
  5. 创建一个以 % 作为域的用户(usr 或任何东西),并授予她对相关数据库的访问权限。

    mysql> CREATE USER 'usr'@'%' IDENTIFIED BY 'some_pass';
    mysql> GRANT ALL PRIVILEGES ON testDb.* TO 'monty'@'%' WITH GRANT OPTION;
    
  6. 为端口 3306 打开防火墙(您可以使用 iptables。确保为任何一个人打开端口,或者如果您的安全性很高,则只允许客户端地址)

  7. 重启防火墙/iptables

您现在应该能够从您的客户端服务器 php 脚本连接 mysql 服务器。

于 2012-07-07T18:46:31.057 回答
1

这可能不是海报问题的答案。但这可能对与我面临同样情况的人有所帮助:

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

无法连接到“xxx.xxx.xxx.xxx”上的 MySQL 服务器 (10060)

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

于 2017-06-15T05:23:32.313 回答