2011-05-27 115 views
2

我有一個應用程序,其中每個用戶都有自己的數據庫並共享相同的模式。 (我有另一個線程討論這個,所以我不需要這方面的消息)多數據庫模式遷移(php/mysql)

當遷移數據庫,我寫了如下圖所示的腳本:

<?php 
$sql = <<<SQL 
ALTER TABLE xyz....; 
ALTER TABLE abc.....; 
SQL; 
$sql_queries = explode(";", $sql); 
$exclude_dbs = array(); 

$conn = mysql_connect("localhost", "USER", "PASSWORD"); 
$show_db_query = mysql_query('SHOW databases'); 
$databases = array(); 
while ($row = mysql_fetch_assoc($show_db_query)) 
{ 
     if (!in_array($row['Database'], $exclude_dbs)) 
     { 
       $databases[] = $row['Database']; 
     } 
} 

foreach($databases as $database) 
{ 
     mysql_select_db($database, $conn); 
     echo "Running queries on $database\n***********************************\n"; 
     foreach($sql_queries as $query) 
     { 
       if (!empty($query)) 
       { 
         echo "$query;"; 
         if (!mysql_query($query)) 
         { 
           echo "\n\nERROR: ".mysql_error()."\n\n"; 
         } 
       } 
     } 
     echo "\n\n"; 
} 
?> 

已經沒有任何問題做工精細。然後我使用stepancheg/mysql-diff來確保數據庫模式良好。

遷移數據庫時,我應該做什麼? (我之前也在臨時服務器上測試過)

+0

您應該在執行遷移時使用事務並在一個查詢出錯時恢復數據庫的所有內容。 – Nico 2015-02-25 18:31:35

回答

0

你的方法似乎在工作,並且使用mysql-diff很好。您是否考慮過使用mysqldump來備份實際數據?這是比常規腳本更傳統的方法。

+0

我使用mysqldump來備份實際數據。謝謝! – 2011-05-29 23:34:56

+0

你也可以用mysqldump複製結構。這聽起來像你知道你在做什麼。 – 2011-05-30 00:25:09