2011-08-30 146 views
2

Anoter問題:什麼是一個完整的表從一個數據庫複製的最佳方式,而無需使用這樣的事情:PHP/MySQL的:複製表和數據從一個數據庫到另一個

CREATE TABLE DB2.USER SELECT * FROM DB1.USER; 

這並不因爲工作我無法同時使用兩個數據庫中的數據。所以我決定用php做這個。在那裏我必須緩存所有數據,然後我會在另一個數據庫中創建一個表。

但現在 - 什麼是最快的方式來緩存數據?我猜每個表格每次少於1000條記錄。

感謝您的輸入

+0

看到這個問題:http://stackoverflow.com/questions/3932608/how-to-copy-一個表從一個mysql數據庫到另一個mysql數據庫 –

回答

5

它導出到一個.sql文件,並導入到新的數據庫。

在phpMyAdmin單擊要導出數據庫,請單擊出口,檢查另存爲文件,然後

然後上傳到您要複製的數據的新的數據庫。


在嚴格的PHP意義上,我能想到的唯一辦法做到這一點會是使用SHOW TABLESdescribe {$table}返回記錄的所有字段名稱和結構,解析出來,創建您的語句,然後遍歷每個表並創建insert語句。

恐怕我能爲你做的最好的是那種原型代碼,我會想象會是難以置信服務器密集的,這就是爲什麼我建議你去其他路線。

喜歡的東西:

<?php 

    // connect to first DB 

    $tables = mysql_query("SHOW TABLES") or die(mysql_error()); 
    while ($row = mysql_fetch_assoc($tables)) { 
     foreach($row as $value) { 
      $aTables[] = $value; 
     } 
    } 
    $i = 0; 
    foreach ($aTables as $table) { 
     $desc = mysql_query("describe " . $table); 
     while ($row = mysql_fetch_assoc($desc)) { 
      $aFields[$i][] = array($row["Field"],$row["Type"],$row["Null"],$row["Key"],$row["Default"],$row["Extra"]); 
     } 
     $i++; 
    } 

    // connect to second DB 

    for ($i = 0; $i < count($aTables); $i++) { 

     // Loop through tables, fields, and rows for create table/insert statements 

     $query = 'CREATE TABLE IF NOT EXISTS {$aTables[$i]} (
       //loop through fields { 

        {$aFields[$i][$j][0]} {$aFields[$i][$j][1]} {$aFields[$i][$j][2]} {$aFields[$i][$j][3]} {$aFields[$i][$j][4]} {$aFields[$i][$j][5]}, 
        {$aFields[$i][$j][0]} {$aFields[$i][$j][1]} {$aFields[$i][$j][2]} {$aFields[$i][$j][3]} {$aFields[$i][$j][4]} {$aFields[$i][$j][5]}, 
        {$aFields[$i][$j][0]} {$aFields[$i][$j][1]} {$aFields[$i][$j][2]} {$aFields[$i][$j][3]} {$aFields[$i][$j][4]} {$aFields[$i][$j][5]}, 
        {$aFields[$i][$j][0]} {$aFields[$i][$j][1]} {$aFields[$i][$j][2]} {$aFields[$i][$j][3]} {$aFields[$i][$j][4]} {$aFields[$i][$j][5]}, 
        etc... 
       } 
      )'; 

      //loop through data 

      $query .= 'INSERT INTO {$aTables[$i]} VALUES'; 
      $result = mysql_query("SELECT * FROM " . $aTables[$i]); 
      while ($row = mysql_fetch_assoc($result)) { 
        $query .= '('; 
       foreach ($aFields[$i][0] as $field) { 

        $query .= '"{$row[$field]}",'; 
       } 
       $query .= '),'; 
      } 
     mysql_query($query); 
    } 

?> 

這是基於關閉的this script這可能派上用場的參考。

希望這是讓你開始的東西,但我建議你尋找一個非PHP的選擇。

+0

好吧,這應該作爲一個工作在PHP中,而不需要用戶輸入 –

+0

我已經更新了我的答案。 –

0
$servername = "localhost"; 
$username = "root"; 
$password = "*******"; 
$dbname = "dbname"; 
$sqlfile = "/path/backupsqlfile.sql"; 

$command='mysql -h' .$servername .' -u' .$username .' -p' .$password .' ' .$dbname .' < ' .$sqlfile; 
exec($command); 
相關問題