MySQL插入多个数据库-问题


MySQL Insert into multiple databases - issue

我有两个数据库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());

我一直在和它斗争,但我做不好。。。感谢

更新:我可以连接两个数据库,也可以进行简单的选择。但在我想从A读取并复制到BackupDb的地方,它总是只连接到一个DB。

错误消息:SELECT命令被拒绝在真实数据库上"备份"用户。。。

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

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

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

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

警告:

请不要使用mysql_*函数来编写新代码。它们不再被维护,社区已经开始了贬低过程。是否看到红框

相反,您应该了解准备好的语句,并使用PDO或MySQLi。本文应该给出一些关于决定使用哪种API的细节。对于PDO,这里有一个很好的教程。

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

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

编辑:

表名可以说是foo,意思是当前数据库中的foo表。但是您可以说baz.foo,这意味着baz数据库中的foo表。当然,您的用户需要对这两个数据库都具有所需的权限。以下代码有效:

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();