【问题标题】:Target machine actively refuses mysqli database connection目标机主动拒绝mysqli数据库连接
【发布时间】:2016-03-24 07:45:12
【问题描述】:

我正在实施一个数据库表复制系统。我知道后一种 MySQL 技术,但我无法让它工作。我现在所拥有的基本上是一个初步的实现。

这是我到目前为止的代码。

//This is where DBHandler is defined
$documentRoot=$_SERVER['DOCUMENT_ROOT'];
require_once($documentRoot."/Classes/DBHandler.php");

$src_controller = new DBHandler();

$query = "SELECT * FROM table";
$temp = $src_controller->select($query);

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

//Create database handler to handle database
$dest_controller = new mysqli("ip address", "user", "password", "database name");

if($mysqli->connect_errno){
    $errorMessage = sprintf("'%s'", $mysqli->connect_error);
    echo $errorMessage;
}
else{
    $dest_controller->query("DELETE * FROM table");

    //Processing of data goes here
    foreach($result as $item){
        //Create query to insert individual records
        $start = "INSERT INTO table(field1, field2...) VALUES (";
        $end = sprintf("'%s', %d, %d, %f, %f)", field1, field2...);
        $start .= $end;

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

    $dest_controller->close();
}

正在读取的数据库与正在写入的数据库位于不同的服务器上。我尝试使用命令“SHOW VARIABLES WHERE Variable_name = 'hostname'”检查目标数据库的主机,并最终得到一个仅提供“抱歉,错误页面或我们已移动”页面的站点。更重要的是,我在 URL 中看到的端口号与“SHOW VARIABLES WHERE Variable_name = 'port'”命令给我的不匹配。后一个命令说 3306。

我不确定该怎么做。我们使用 cPanel X 连接到数据库,并且有一个选项允许选择 IP 远程访问该数据库。我很肯定我授予了对正确地址的访问权限,但这没有取得任何成果。

这是主机的某种问题,还是我在创建 mysqli 对象时没有使用正确的 IP 地址进行连接?

【问题讨论】:

  • 只是检查;但是您想在new mysqli() 部分中使用您的MYSQL 服务器的IP 地址,而不是您的PHP 服务器的地址。
  • 我确实使用了 MySQL 服务器地址。我测试了这个东西,“目标正在积极拒绝连接”消息是第一个结果。接下来的一切都是与此相关的错误,但我可以看到 PHP 是正确的。我在另一个没有问题的文件中使用了相同的代码,但后者只是本地写入和删除。
  • 如果您已设置 cPanel 允许在“数据库”选项卡中使用“远程 MySQL”进行远程 IP 访问,那么下一步将检查 WHM 设置(CPanel 的父程序),如果你可以访问吗?但我没有任何更直接的建议。 3306 是 MySQL 的标准端口
  • 另一个明显的问题,但您是否检查过您以new mysqli() 登录的用户是否存在于 MySQL 服务器上?
  • 是的。我们有两个站点,一个用于公众,另一个用于与管理相关的操作。在公共站点上,有一个类已经将连接信息插入到它创建的用于处理所有内容的 mysqli 对象中。我复制了该脚本的所有信息,因此没有理由不正确。

标签: php mysql database mysqli


【解决方案1】:

如果 MySQL 端口在该服务器上打开?用这个检查:

telnet yoursever.address.com 3306

如果 telnet 未连接,则端口被阻止,您需要您的托管服务提供商打开它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    • 2013-07-15
    • 2014-05-09
    • 1970-01-01
    相关资源
    最近更新 更多