0

(初心者として)私が見逃しているもう1つの小さな点は、2つのDBの間にバックアップスクリプトがあり、最後のステップとして、実際のDBを最適化してオーバーヘッドのサイズを減らす必要があります。1つのDBのみを使用する場合に機能するコードがありますが、2つ使用する必要があります。

$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' for table'actualtable'に対して拒否されました

私が何を間違えているのか分かりますか?

更新:actdbuserはそのDBのルートであるため、bckuserは何も実行しないでください。ただし、何らかの理由でSHOWTABLEが$actconnを認識しません...

UPDATE2:もう一度optを試しましたが、変更されたのは$ actdbname='db-name'だけです。作業中および$actdbname=' db-name'仕様のアポストロフィを使用する場合。

これはsharedhostにあるため、DB名を変更できないことに注意してください。

@Corbinの興味深いアイデアに感謝します。試してみましたが、うまくいきませんでしたが、どうすればデバッグできますか?なんらかの理由で適切にデバッグすることすらできません...

4

1 に答える 1

1

クエリを実行するには、ユーザー 'bckuser'@'localhost' に適切な権限を付与する必要がありSHOW TABLE STATUSます。

残念ながら、MySQL 5.5 には、この操作に対する個別の許可オプションはありません。ALLまたは、このユーザーに付与するか、rootユーザー ログインを使用してこの操作を実行することもできます。補助金マニュアルを参照

于 2012-08-06T07:51:00.483 に答える