0

我缺少的另一点(作为初学者)我在两个数据库之间有一个备份脚本,作为最后一步,我应该优化真实数据库以减少开销的大小。我有一个代码在我只使用一个数据库时有效,但我需要使用两个:

$actconn = mysql_connect($dbhost, $actdbuser, $actdbpass) or die ('act Error connecting to mysql');
$bckconn = mysql_connect($dbhost, $bckdbuser, $bckdbpass) or die (' back Error connecting to mysql');

$ressql="SHOW TABLE STATUS FROM $actdbname WHERE Data_free / Data_length > 0.1 AND Data_free >  102400";

- 这应该说明 bckuser 被忽略了,我相信......

 $res = mysql_query( $ressql, $actconn);

 echo mysql_error(); 
while($optrow = mysql_fetch_assoc($res)) {
  mysql_query('OPTIMIZE TABLE ' . $optrow['Name'], $actconn);
}

actconn 值:资源 ID #1

bckconn 值:资源 ID #2

mysql_error 说:

SELECT 命令拒绝用户 'bckuser'@'localhost' 用于表 '实际表'

知道我做错了什么吗?

更新: bckuser 不应该对它做任何事情,因为 actdbuser 是该数据库的根目录,但由于某种原因 SHOW TABLE 无法识别 $actconn ...

UPDATE2:我再次尝试了 opt ,唯一改变的是 $actdbname='db-name'; db-name使用规范撇号和 $actdbname=' ' 工作时;

请注意这是在共享主机上,所以我无法更改数据库名称。

感谢@Corbin 有趣的想法,我试过但没有用,但我该如何调试呢?由于某种原因,我什至无法正确调试它...

4

1 回答 1

1

您需要对用户 'bckuser'@'localhost' 具有适当的授予权限才能执行SHOW TABLE STATUS查询。

不幸的是,在 MySQL 5.5 中,这个操作没有单独的授权选项。或者,您可以授予ALL该用户或使用root用户登录来执行此操作。见赠款手册

于 2012-08-06T07:51:00.483 回答