0

サーバー上でMySQLテーブルのダンプを作成しようとしていますが、Zendでこれを実行しようとしています。テーブルへのすべての接続にmodel/mapper / dbtable構造があり、マッパーに次のコードを追加しています。

public function dumpTable()
{
    $db = $this->getDbTable()->getAdapter();
    $name = $this->getDbTable()->info('name');
    $backupFile = APPLICATION_PATH . 
                  '/backup/' . date('U') .
                  '_' . $name . '.sql'; 
    $query = "SELECT * INTO OUTFILE '$backupFile' FROM $name";
    $db->query( $query );               
}

これは桃色で動作するはずだと思いましたが、

Message: Mysqli prepare error: Access denied for user 'someUser'@'localhost' (using password: YES) 

これが結果として生じるものです。

someUserのユーザー権限を確認したところ、彼は問題のデータベースとテーブルに対するすべての権限を持っています。私はこの辺りやネット全般を見ていて、通常はユーザーの「すべて」の権限をオンにすることが解決策のようですが、私の場合はそうではありません(疲れた目で今何かを見落としている場合を除く)+実稼働サーバーで「すべて」をオンにしたくない)。

私はここで何が間違っているのですか?または、Zendでこれを行うためのよりエレガントな方法を知っている人はいますか?

4

4 に答える 4

2

問題のユーザーに「すべての特権」を与えましたが、これはグローバルではなくデータベースごとに行いました。ただし、outfileを使用するために必要な特権はFILEであり、GLOBAL権限としてのみ設定できます。

于 2010-03-16T10:06:31.387 に答える
2

アクセス許可に問題がある場合は、そのフォルダーにアクセスするために必要なアクセス許可を持つようにmysqlが実行されるユーザーを設定する必要があります。たとえば/tmp/filedumps、の所有者www-dataとのグループがwww-dataある場合、mysqlユーザーアカウントをdebian/ubuntuのグループに追加する必要がありますusermod -a -G www-data mysql

これが私が*nixボックスの問題を解決した方法です。

于 2010-10-14T20:05:05.923 に答える
1
>$ echo "select count(predicate),subject from TableA group by subject"  | mysql -u yourusername -p yourdatabasename > ~/XYZ/outputfile.txt

FILE権限が付与されないという回避策があるこの投稿からの抜粋: ファイルへのクエリ出力でアクセス拒否エラーが発生する

于 2012-06-08T18:40:31.870 に答える
1

通常のSELECTは機能しますか?そうでない場合、これはパスワードが間違っているという単純なケースだと思います。通常のSELECTが機能する場合は、正確なユーザーにOUTFILE権限を付与したことを確認してください

 'someUser'@'localhost'

たとえばではありません

  'someUser'@'%'

私の記憶が正しければ、これら2つのアカウントは異なる方法で扱われ、別々の権限設定があります。

于 2010-03-15T17:34:42.183 に答える