我在Windows Server 2008 R2上运行一个名为LIVE的MySQL数据库。我编写了一个脚本来复制LIVE数据库并将其命名为REPORT。我的脚本应检查MySQL中是否存在名为REPORT的数据库,如果确实存在,则将其替换为LIVE的新副本,如果没有,则应创建一个名为REPORT的新数据库。然后它应该复制数据库的所有内容,包括所有表和视图。 这是我的剧本:
function duplicateDatabase($sourceDB=NULL, $targetDB=NULL) {
$result = mysql_query('SHOW TABLES FROM ' . $sourceDB) or die(mysql_error());
while($row = mysql_fetch_row($result)) {
mysql_query('DROP TABLE IF EXISTS `' . $targetDB . '`.`' . $row[0] . '`') or die(mysql_error());
mysql_query('CREATE TABLE `' . $targetDB . '`.`' . $row[0] . '` LIKE `' . $sourceDB . '`.`' . $row[0] . '`') or die(mysql_error());
mysql_query('INSERT INTO `' . $targetDB . '`.`' . $row[0] . '` SELECT * FROM `' . $sourceDB . '`.`' . $row[0] . '`') or die(mysql_error());
mysql_query('OPTIMIZE TABLE `' . $targetDB . '`.`' . $row[0] . '`') or die(mysql_error());
}
mysql_free_result($result);
mysql_close($link);
}
duplicateDatabas('LIVE', 'REPORT');
我一直收到错误消息,说它无法复制我的数据库中的视图。有人可以编辑我的脚本,以便它完全符合我的要求吗?
答案 0 :(得分:0)
SHOW TABLES命令将列出表中的视图,但是,它不区分2.您的脚本甚至不会尝试以不同方式处理视图,因此它会像处理表一样处理它们。
使用SHOW FULL TABLES FROM dbname命令(或来自information_schema的查询表和视图),其中包含一个额外的列,用于在表(基表)和视图(视图)之间启用dinstinguishing。
修改您的php代码并根据对象的类型(表或视图)发出相应的drop / create命令。对于视图,不要执行插入和优化命令。