将数据从一个数据库复制到另一个数据库,包括PHP中的数据

将数据从一个数据库复制到另一个数据库,包括PHP中的数据,php,mysql,database,Php,Mysql,Database,我有以下代码可以复制/克隆所有表,但它不复制表中的数据。如何调整代码以复制数据库和数据 <?php /********************* START CONFIGURATION *********************/ $DB_SRC_HOST='localhost'; $DB_SRC_USER='root'; $DB_SRC_PASS='password'; $DB_SRC_NAME='database1'; $DB_DST_HOST='localhost'; $DB_D

我有以下代码可以复制/克隆所有表,但它不复制表中的数据。如何调整代码以复制数据库和数据

<?php

/********************* START CONFIGURATION *********************/
$DB_SRC_HOST='localhost';
$DB_SRC_USER='root';
$DB_SRC_PASS='password';
$DB_SRC_NAME='database1';

$DB_DST_HOST='localhost';
$DB_DST_USER='root';
$DB_DST_PASS='password';
$DB_DST_NAME='database2';

/*********************** 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());
?>

您必须在newdb.table中添加一个insert,从origdb.table中选择*。您最好使用mysqldump转储原始数据库的内容,然后将转储加载到新表中。这也会复制其他任何东西,比如触发器和诸如此类的东西。@MarcB-Haha,和我尝试过但失败的SQL查询一样。您应该看看我的另一个问题:数据库是否都在同一台mysql服务器上?我这样问是因为两个连接的主机相同。如果您登录的用户有权从两个数据库中选择root用户将使用的数据库名称,您可以使用类似dbName.tableName的表名完全限定数据库名称,并在选择它们的同时创建表。类似于:从db2.tableName创建表db1.tableName作为SELECT*,这将创建一个db2.tableName的副本,其中包含该数据库中db1.tableName中的所有数据@JonathanKuhn-是的,都在同一台服务器上,哈哈,你也应该看看我的另一个问题,我用同样的方法尝试了,但没有效果。如果这是前一个问题的延续,你真的应该更新这个问题,而不是问一个新问题。我想说的是,尝试删除create语句中SELECT语句的括号,并删除末尾的分号。另外,您不需要两个数据库连接,一个就可以了。选择哪个数据库并不重要,只需选择一个,因为您在查询中指定了数据库名称。您仍然可以使用全名访问另一个。最后,检查mysql\u错误,看看您的查询是否有问题。