1

我有两个数据库 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 命令拒绝“备份”真实数据库上的用户...

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

4

2 回答 2

2

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

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

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

于 2012-08-05T15:16:19.547 回答
1

警告:

请不要使用mysql_*函数来编写新代码。它们不再被维护并且社区已经开始了弃用过程。看到红框了吗?

相反,您应该了解准备好的语句并使用PDOMySQLi本文应该提供一些有关决定使用哪个 API 的详细信息。对于 PDO,这里有一个很好的教程

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

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

编辑:

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

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();
于 2012-08-05T15:27:39.410 回答