MySQL插入多个数据库 - 问题

时间:2012-08-05 15:09:33

标签: php mysql multiple-databases

我有两个DB real和backDB。我想用SQL复制从一个到另一个的所有内容......看起来并不那么容易。如果有人能帮助我。这是我的代码:

$newdbsql="CREATE TABLE $newdb LIKE $actdbname.`$acttable`";
$newresult = mysql_query($newdbsql, $bckconn) or die(mysql_error());

// copy all the data
$query = "INSERT INTO $newdb SELECT * FROM $actdbname.$acttable WHERE $acttable.azon < $upto";
$result = mysql_query($query, $bckconn) or die(mysql_error());

我一直在与它斗争,但我无法做到正确...谢谢

更新: 我可以连接两个DB,我也可以做简单的选择。但是,我想从A读取并复制到BackupDb,它总是只连接到一个DB。

错误讯息: SELECT命令被拒绝在真实数据库上“备份”用户......

重要信息:我在共享主机上,所以不容易:)

2 个答案:

答案 0 :(得分:2)

您只需要将备份数据库用户的SELECT权限授予常规数据库:

GRANT SELECT ON `$actdbname`.* TO `backup`@`localhost`;

为了获得最佳安全性,建议不要授予SELECT以外的任何内容,因为不需要其他权限。

答案 1 :(得分:1)

  

警告:

     

请不要使用mysql_*函数来编写新代码。它们已不再维护,社区已开始deprecation process。请参阅red box

     

相反,您应该了解prepared statements并使用PDOMySQLiThis article应该提供有关决定使用哪个API的一些详细信息。对于PDO,这里是good tutorial

要在不使用MySQL内部复制功能的情况下复制数据库,您可以使用CREATE TABLE foo LIKE bar;INSERT INTO foo SELECT * FROM bar;语句。

第一行将创建一个名为foo的新表,使用与bar最初完全相同的结构,第二行将帮助您复制整个bar的内容导入foo

编辑:

表名称可以表示为foo,它表示当前数据库中的foo表。但您可以说baz.foo,这意味着foo数据库中的baz表。当然,您的用户需要在两个数据库上拥有所需的权限。以下代码有效:

mysql_connect("localhost", "username", "password");
mysql_select_db("original");

mysql_query("CREATE TABLE backup.foo LIKE original.bar");
mysql_query("INSERT INTO backup.foo SELECT * FROM original.bar");

mysql_close();