【问题标题】:MySQL database target machine actively refuses connectionMySQL数据库目标机主动拒绝连接
【发布时间】:2015-12-18 21:02:24
【问题描述】:

在过去的几天里,我一直在尝试在一台服务器上获取脚本以连接到另一台服务器上的 MySQL 数据库。我已经四处寻找是否可以找到解决方案,但进展甚微。我正在做的是从本地数据库读取,然后使用该信息写入所需的数据库(具有相同名称的表)。代码如下。

require_once($documentRoot."/Classes/DBHandler.php");

$db_controller1 = new DBHandler();

$query = "SELECT ...";
$temp = $db_controller1->select($query);

//Convert temporary database contents into usable result
while($rowObject=mysql_fetch_object($temp)){
    $result[]=$rowObject;
}

//Create database handler to handle target database
//Server actively refuses this connection.  Wrong IP address or user?
$db_controller2 = new mysqli("ip address:3306", "user", "password", "DB name");

if($db_controller2->connect_errno){
    $errorMessage = sprintf("'%s'", $db_controller2->connect_error);
    echo $errorMessage;
}
else{
    $db_controller2->query("DELETE ...");

    //Processing of data goes here
    foreach($result as $item){
        //Create query to insert individual records
        $start = "INSERT INTO ...";
        $end = sprintf("remainder of insertion query here");
        $start .= $end;

        //Database handler uses $start to insert record
        $db_controller2->query($start);
    }

    $db_controller2->close();
}

与我交谈过的每个人都同意 IP 地址本身是正确的。我觉得奇怪的是,当我通过 cPanel 登录后查看数据库时,URL 显示端口号为 2082,但检查数据库变量给我的端口号为 3306。所有 SQL 查询都是正确的,并且没有任何问题PHP 代码。我收到的错误取决于我使用的端口号。对于 3306:

Warning: mysqli::mysqli(): (HY000/2002): No connection could be made because the target machine actively refused it. in C:\etc.\script.php on line 30
'No connection could be made because the target machine actively refused it. '

当我使用 2082 时,我收到不同的错误消息:

Warning: mysqli::mysqli(): MySQL server has gone away in C:\etc.\script.php on line 28

Warning: mysqli::mysqli(): Error while reading greeting packet. PID=[PID here] in C:\etc.\script.php on line 28

Warning: mysqli::mysqli(): (HY000/2006): MySQL server has gone away in C:\etc.\script.php on line 28

我完全不知道该怎么办。我所看到的大部分内容似乎表明这是一个与服务器相关的问题,我需要创建一个具有远程访问权限的新用户或修改现有用户以允许远程访问,但无论出于何种原因,我都可以'不要做这些事情,因为没有远程访问的选项。

有人有建议吗?对于同一服务器上的任何文件,连接到目标数据库都没有问题。

注意:“第 X 行”消息是不正确的,因为出于保密原因,我稍微修改了我在此处发布的内容。但是,它们指的是我创建新 mysqli 对象的行。

【问题讨论】:

  • 我想知道这是否与 PHP/SQL 本身有很大关系。您是否使用防火墙或类似的东西来阻止建立连接?
  • 我不太确定,所以我正在调查。有人告诉我,此类场景的最佳解决方案是复制,但由于我们需要能够控制此脚本何时更新数据库表,因此我们不能真正使用复制。
  • 这不是 PHP 问题。该错误表明问题出在服务器上。它有防火墙阻止来自网络的连接,或者 MySQL 守护程序未配置为响应网络。

标签: php mysql


【解决方案1】:

在运行目标 MySQL 实例的机器上......

您的 my.cnf 文件中有什么内容?

大概在这里:

# vi /etc/my.cnf

确保跳过网络已被注释:

# skip-networking

确保绑定地址绑定到正确的 IP 地址:

bind-address 65.55.55.2

最后,检查你的防火墙。

【讨论】:

  • 我将不得不向我的老板询问如何访问我们的 my.cnf 文件,因为我认为这个特定数据库所在的服务器实际上并不存在于这栋大楼中,我不知道'认为我没有使用 TeamViewer 连接到它的信息。我需要将绑定地址修改为尝试访问它的机器的地址,还是只修改它自己的 IP 地址?
  • 只是到它自己的地址,外部地址。可以用 SQL 工具连接数据库吗?
  • 什么样的工具?我通常通过 cPanel 访问它以检查一个表,以确保另一个脚本正在正确更新它。不过我不确定你在说什么。
  • 一个 SQL 查询工具。这样您就可以确认它可以连接到。可能还有一些其他安全功能阻止访问。
  • 可能需要从网络服务器授予访问权限:GRANT ALL ON foo.* TO YOUR_USER@'202.54.10.20' IDENTIFIED BY 'PASSWORD';
猜你喜欢
  • 2016-03-24
  • 2011-04-04
  • 2014-05-09
  • 2017-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多