在过去的几天里,我一直试图在一台服务器上获取一个脚本,以连接到另一台服务器上的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查询都是正确的,并且有' s 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对象的行。
答案 0 :(得分:0)
在运行目标MySQL实例的机器上....
my.cnf文件中有什么内容?
可能在这里:
# vi /etc/my.cnf
确保跳过网络评论:
# skip-networking
确保bind-address绑定到正确的IP地址:
bind-address 65.55.55.2
最后,检查防火墙。