我有两个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命令被拒绝在真实数据库上“备份”用户......
重要信息:我在共享主机上,所以不容易:)
答案 0 :(得分:2)
您只需要将备份数据库用户的SELECT
权限授予常规数据库:
GRANT SELECT ON `$actdbname`.* TO `backup`@`localhost`;
为了获得最佳安全性,建议不要授予SELECT
以外的任何内容,因为不需要其他权限。
答案 1 :(得分:1)
警告:强>
请不要使用
mysql_*
函数来编写新代码。它们已不再维护,社区已开始deprecation process。请参阅red box?相反,您应该了解prepared statements并使用PDO或MySQLi。 This 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();