用于复制MySQL数据库的PHP脚本,包括其视图?

时间:2015-11-16 10:05:49

标签: php mysql

我在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');

我一直收到错误消息,说它无法复制我的数据库中的视图。有人可以编辑我的脚本,以便它完全符合我的要求吗?

1 个答案:

答案 0 :(得分:0)

SHOW TABLES命令将列出表中的视图,但是,它不区分2.您的脚本甚至不会尝试以不同方式处理视图,因此它会像处理表一样处理它们。

  1. 使用SHOW FULL TABLES FROM dbname命令(或来自information_schema的查询表和视图),其中包含一个额外的列,用于在表(基表)和视图(视图)之间启用dinstinguishing。

  2. 修改您的php代码并根据对象的类型(表或视图)发出相应的drop / create命令。对于视图,不要执行插入和优化命令。