【发布时间】: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 本身有很大关系。您是否使用防火墙或类似的东西来阻止建立连接?
-
我不太确定,所以我正在调查。有人告诉我,此类场景的最佳解决方案是复制,但由于我们需要能够控制此脚本何时更新数据库表,因此我们不能真正使用复制。
-
这里是来自 cPanel liquidweb.com/kb/enable-remote-mysql-connections-in-cpanel的说明
-
这不是 PHP 问题。该错误表明问题出在服务器上。它有防火墙阻止来自网络的连接,或者 MySQL 守护程序未配置为响应网络。