2011-05-27 117 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