Anoter问题:在不使用类似内容的情况下从一个数据库复制整个表的最佳方法是什么:
CREATE TABLE DB2.USER SELECT * FROM DB1.USER;
这不起作用,因为我无法同时使用两个数据库中的数据。所以我决定用php制作这个。在那里,我必须缓存所有数据,然后我在另一个数据库中创建一个表。
但是现在 - 缓存数据的最快方法是什么?我猜每张桌子每次都有不到1000条记录。
感谢您的输入
答案 0 :(得分:5)
将其导出到.sql文件并导入到新数据库。
在phpMyAdmin中单击要导出的数据库,单击 export ,选中另存为文件,然后 go 。
然后将其上传到要复制数据的新数据库。
在严格的PHP意义上,我能想到的唯一方法就是使用SHOW TABLES
和describe {$table}
来返回记录的所有字段名称和结构,解析出来,创建create 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替代方案。
答案 1 :(得分:1)
这就是我这样做的方式,而不是我原创的方式:
http://homepage.mac.com/kelleherk/iblog/C711669388/E2080464668/index.html
答案 2 :(得分:0)
$servername = "localhost";
$username = "root";
$password = "*******";
$dbname = "dbname";
$sqlfile = "/path/backupsqlfile.sql";
$command='mysql -h' .$servername .' -u' .$username .' -p' .$password .' ' .$dbname .' < ' .$sqlfile;
exec($command);