将数据从一个数据库插入另一个服务器上的另一个数据库 - 未链接的服

时间:2014-12-31 10:26:48

标签: php mysql database

我正在尝试将一些数据库中的一些选定数据从1月1日到期的服务器上复制到另一个数据库中,以便我可以保留它。 第二个数据库位于不同的服务器上,不同的主机等 - 我不再可以访问第一个数据库,但只知道我需要的项目的各个位置。

我已经做了一些关于如何做到这一点的搜索,但是大多数时候我提出了链接服务器的要求 - 这是因为我无法访问原始服务器,所以不是一种选择。

我编写了以下内容,但每当我运行脚本时(我只需要一次并按需)我就会遇到网关超时。

$link = mysql_connect('XXXXaddressXXXX', 'XXXXuserXXXX', 'XXXXXXpwXXXXX');  //edited out the access details for security
$row = mysql_select_db('sfi_db', $link);


$query = "SELECT t.entry_id, t.title, t.year, t.month, t.day, d.field_id_1, d.field_id_2, d.field_id_3 FROM sfi_db.exp_channel_titles t LEFT JOIN sfi_db.exp_channel_data d ON t.entry_id = d.entry_id WHERE d.field_id_5='Latest-Updates'";
$results=mysql_query($query); 
while($row=mysql_fetch_row($results)){
    $id=$row[0];
    $title = $row[1];
    $year = $row[2];
    $month = $row[3];
    $day = $row[4];
    $summary = $row[5];
    $body = $row[6];
    $image = $row[7];

    $dBIP='XXXAddressOfSecondServerXXXX';
    $dBADN='XXXXUserofSecondServerXXXX';
    $dBPWD='XXXXPWofSecondServer';
    $dBDBS="XXXXDBnameXXXX";

    // Connection
    $CONNECTW=mysql_connect($dBIP,$dBADN,$dBPWD);
    $row=mysql_select_db($dBDBS, $CONNECTW);

    mysql_query("INSERT INTO $dBIP.$dBDBS.newsimport (id,title,year,month,day,summary,body,image_url) VALUES ('$id','$title','$year','$month','$day','$summary','$body','$image')",$CONNECTW);


    $link = mysql_connect('XXXXaddressXXXX', 'XXXXuserXXXX', 'XXXXXXpwXXXXX');
    $row = mysql_select_db('sfi_db', $link);
    }

最后一个连接是重新连接到第一个数据库,因为脚本是为原始第一个查询中的每个项目运行的。

任何有助于找出我做错事的帮助都很宝贵!谢谢。

///在第一次回复后被编辑

我现在编辑了代码,但仍然得到504网关错误。新代码如下:

// Connection 1
$link = mysql_connect('XXXXaddressXXXX', 'XXXXuserXXXX', 'XXXXXXpwXXXXX');  //edited out the access details for security
$row = mysql_select_db('sfi_db', $link);

    $dBIP='XXXAddressOfSecondServerXXXX';
    $dBADN='XXXXUserofSecondServerXXXX';
    $dBPWD='XXXXPWofSecondServer';
    $dBDBS="XXXXDBnameXXXX";

// Connection 2
$CONNECTW=mysql_connect($dBIP,$dBADN,$dBPWD);
$row=mysql_select_db($dBDBS, $CONNECTW);


$query = "SELECT t.entry_id, t.title, t.year, t.month, t.day, d.field_id_1, d.field_id_2, d.field_id_3 FROM sfi_db.exp_channel_titles t LEFT JOIN sfi_db.exp_channel_data d ON t.entry_id = d.entry_id WHERE d.field_id_5='Latest-Updates'";
$results=mysql_query($query); 
while($row=mysql_fetch_row($results)){
    $id=$row[0];
    $title = $row[1];
    $year = $row[2];
    $month = $row[3];
    $day = $row[4];
    $summary = $row[5];
    $body = $row[6];
    $image = $row[7];


    mysql_query("INSERT INTO $dBIP.$dBDBS.newsimport (id,title,year,month,day,summary,body,image_url) VALUES ('$id','$title','$year','$month','$day','$summary','$body','$image')",$CONNECTW);

    }

1 个答案:

答案 0 :(得分:1)

// Connection 1
$link = mysql_connect('XXXXaddressXXXX', 'XXXXuserXXXX', 'XXXXXXpwXXXXX');  //edited out the access details for security
mysql_select_db('sfi_db', $link) or die("Can't connect to first database");

// Connection 2
$dBIP='XXXAddressOfSecondServerXXXX';
$dBADN='XXXXUserofSecondServerXXXX';
$dBPWD='XXXXPWofSecondServer';
$dBDBS="XXXXDBnameXXXX";

$CONNECTW=mysql_connect($dBIP,$dBADN,$dBPWD);
mysql_select_db($dBDBS, $CONNECTW)  or die("Can't connect to second database");;


$query = "SELECT t.entry_id, t.title, t.year, t.month, t.day, d.field_id_1, d.field_id_2, d.field_id_3 FROM sfi_db.exp_channel_titles t LEFT JOIN sfi_db.exp_channel_data d ON t.entry_id = d.entry_id WHERE d.field_id_5='Latest-Updates'";
$results=mysql_query($query,$link); 
while($row=mysql_fetch_row($results)){
    $id=$row[0];
    $title = $row[1];
    $year = $row[2];
    $month = $row[3];
    $day = $row[4];
    $summary = $row[5];
    $body = $row[6];
    $image = $row[7];


    mysql_query("INSERT INTO $dBDBS.newsimport (id,title,year,month,day,summary,body,image_url) VALUES ('$id','$title','$year','$month','$day','$summary','$body','$image')",$CONNECTW);

    }

发生了什么变化:

  1. 如果无法连接,则在每次连接后删除row=以支持骰子。
  2. 使用$link
  3. 指定第一个查询中的连接
  4. 从插入查询中删除了$ dBIP,因为a.b.C听起来不是有效的表名。
  5. 这应该有效,你的504错误可能是因为你的脚本执行时间太长而你点击了timeout parameter

    您可以通过在每个循环结束时调用set_time_limit()或将值更改为php.ini来解决此问题。认为您的网络服务器(apache或其他)也在GET请求上超时。