2011-08-30 144 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); 
相关问题