簡體   English   中英

將一個數據庫中的數據插入另一台服務器上的另一個數據庫中-未鏈接的服務器

[英]Insert data from one DB into another on a different server - servers not linked

我正在嘗試從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);

    }
// 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. 由於abC聽起來不是有效的表名,因此從Insert查詢中刪除了$ dBIP。

這應該可行,您的504錯誤可能是因為腳本執行時間太長,並且您按下了timeout參數

您可以通過在每個循環結束時調用set_time_limit()或將值更改為php.ini來解決此問題。 認為您的網絡服務器(Apache或其他服務器)在GET請求上也有超時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM