2014-03-12 36 views
0

我正在使用一個小腳本來自動化服務器之間的架構傳輸,但現在我需要修改它以包含數據。我對PHP不太好,所以我在尋求你的幫助。 這是我迄今爲止(部分我從另一個來源,而不是我了):PHP複製mysql架構和數據

/*********** GRAB OLD SCHEMA ***********/ $db1 = mysql_connect($DB_SRC_HOST,$DB_SRC_USER,$DB_SRC_PASS) or die(mysql_error()); mysql_select_db($DB_SRC_NAME, $db1) or die(mysql_error());

$result = mysql_query("SHOW TABLES;",$db1) or die(mysql_error()); 
$buf="set foreign_key_checks = 0;\n"; 
$constraints=''; 
while($row = mysql_fetch_array($result)) 
{ 
     $result2 = mysql_query("SHOW CREATE TABLE ".$row[0].";",$db1) or die(mysql_error()); 
     $res = mysql_fetch_array($result2); 
     if(preg_match("/[ ]*CONSTRAINT[ ]+.*\n/",$res[1],$matches)) 
     { 
       $res[1] = preg_replace("/,\n[ ]*CONSTRAINT[ ]+.*\n/","\n",$res[1]); 
       $constraints.="ALTER TABLE ".$row[0]." ADD ".trim($matches[0]).";\n"; 
     } 
     $buf.=$res[1].";\n"; 
} 
$buf.=$constraints; 
$buf.="set foreign_key_checks = 1"; 

/**************** CREATE NEW DB WITH OLD SCHEMA ****************/ 
$db2 = mysql_connect($DB_DST_HOST,$DB_DST_USER,$DB_DST_PASS) or die(mysql_error()); 
$sql = 'CREATE DATABASE '.$DB_DST_NAME; 
if(!mysql_query($sql, $db2)) die(mysql_error()); 
mysql_select_db($DB_DST_NAME, $db2) or die(mysql_error()); 
$queries = explode(';',$buf); 
foreach($queries as $query) 
     if(!mysql_query($query, $db2)) die(mysql_error()); 

我如何修改現有代碼,以數據呢?

謝謝!

回答

0

如果您需要傳輸數據/和/架構,爲什麼不做一個mysqldump,並且只是將整個事件讀回來?這不是,劇本應該做什麼?

+0

我只是想加快速度。這個腳本基本上抓住所有表並將它們重新創建到目標數據庫(它也創建它) –

+0

爲什麼使用MySQL自己的dump/read函數會更快?我一直這樣做,只需使用:mysqldump> file.sql,然後使用mysql

+0

這就是我通常使用的方式,但是這也會被沒有MySQL基本知識的人使用。所以我一直在試圖讓他們成爲一個能夠處理所有基本移動任務的腳本... –

0

經過很多鏈接和教程,我設法想出了一些簡單的工作!下面是代碼:

$connectDST = mysql_connect($DB_DST_HOST, $DB_DST_USER, $DB_DST_PASS); 
mysql_select_db($DB_DST_NAME, $connectDST); 
set_time_limit(0); 

$connectSRC = mysql_connect($DB_SRC_HOST, $DB_SRC_USER, $DB_SRC_PASS); 

mysql_select_db($DB_SRC_NAME, $connectSRC); 

$tables = mysql_query("SHOW TABLES FROM $DB_SRC_NAME"); 

while ($line = mysql_fetch_row($tables)) { 
    $tab = $line[0]; 
    mysql_query("DROP TABLE IF EXISTS $DB_DST_NAME.$tab") or die('Couldn\'t drop table:'.mysql_error()); 
    mysql_query("CREATE TABLE $DB_DST_NAME.$tab LIKE $DB_SRC_NAME.$tab") or die(mysql_error()) or die('Couldn\'t create table:'.mysql_error()); 
    mysql_query("INSERT INTO $DB_DST_NAME.$tab SELECT * FROM $DB_SRC_NAME.$tab") or die('Couldn\'t insert data:'.mysql_error()); 
    echo "Table: <b>" . $line[0] . " </b>Done<br>"; 
} 

我試圖避免高管,因爲某些主機不允許它...