Anoter問題:什麼是一個完整的表從一個數據庫複製的最佳方式,而無需使用這樣的事情:PHP/MySQL的:複製表和數據從一個數據庫到另一個
CREATE TABLE DB2.USER SELECT * FROM DB1.USER;
這並不因爲工作我無法同時使用兩個數據庫中的數據。所以我決定用php做這個。在那裏我必須緩存所有數據,然後我會在另一個數據庫中創建一個表。
但現在 - 什麼是最快的方式來緩存數據?我猜每個表格每次少於1000條記錄。
感謝您的輸入
Anoter問題:什麼是一個完整的表從一個數據庫複製的最佳方式,而無需使用這樣的事情:PHP/MySQL的:複製表和數據從一個數據庫到另一個
CREATE TABLE DB2.USER SELECT * FROM DB1.USER;
這並不因爲工作我無法同時使用兩個數據庫中的數據。所以我決定用php做這個。在那裏我必須緩存所有數據,然後我會在另一個數據庫中創建一個表。
但現在 - 什麼是最快的方式來緩存數據?我猜每個表格每次少於1000條記錄。
感謝您的輸入
它導出到一個.sql文件,並導入到新的數據庫。
在phpMyAdmin單擊要導出數據庫,請單擊出口,檢查另存爲文件,然後去。
然後上傳到您要複製的數據的新的數據庫。
在嚴格的PHP意義上,我能想到的唯一辦法做到這一點會是使用SHOW TABLES
和describe {$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的選擇。
好吧,這應該作爲一個工作在PHP中,而不需要用戶輸入 –
我已經更新了我的答案。 –
但我不能使用這樣的命令,唯一的可能性是用PHP做某事... –
$servername = "localhost";
$username = "root";
$password = "*******";
$dbname = "dbname";
$sqlfile = "/path/backupsqlfile.sql";
$command='mysql -h' .$servername .' -u' .$username .' -p' .$password .' ' .$dbname .' < ' .$sqlfile;
exec($command);
看到這個問題:http://stackoverflow.com/questions/3932608/how-to-copy-一個表從一個mysql數據庫到另一個mysql數據庫 –