何か案は?
SELECT * INTO OUTFILE '/home/myacnt/docs/mysqlCSVtest.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '*'
LINES TERMINATED BY '\n'
FROM tbl_property
WHERE managerGroupID = {$managerGroupID}
エラー:
Access denied for user 'asdfsdf'@'localhost' (using password: YES)
次のSQLコマンドを実行してみてください。
> grant all privileges
on YOUR_DATABASE.*
to 'asdfsdf'@'localhost'
identified by 'your_password';
> flush privileges;
言及しているフォルダへの書き込みではなく、データベースへの接続に問題があるようです。
また、FILE
をユーザー'asdfsdf'@'localhost'
に付与していることを確認してください。
> GRANT FILE ON *.* TO 'asdfsdf'@'localhost';
正直なところ、私は助成金を処理することを気にしませんでしたし、これは特権がなくても機能しました:
echo "select * from employee" | mysql --Host=HOST --port=PORT --user=UserName --password=Password DATABASE.SCHEMA > output.txt
@fijaaronが言うように、
GRANT ALL
はGRANT FILE
を意味しませんGRANT FILE
は*.*
でのみ機能しますそうする
GRANT FILE ON *.* TO user;
CP/WHMはPHPMyAdminでrootとしてのユーザー権限を変更する機能を奪ったため、コマンドラインを使用して以下を行う必要があります。
mysql> GRANT FILE ON *.* TO 'user'@'localhost';
ステップ2は、そのユーザーが特定のフォルダーにファイルをダンプできるようにすることです。これを行うにはいくつかの方法がありますが、最終的にフォルダを置くことになりました:
/home/user/tmp/db
そして
chown mysql:mysql /home/user/tmp/db
これにより、mysqlユーザーはファイルを書き込むことができます。以前のポスターで述べたように、MySQLのtempフォルダーも使用できます。それは本当に重要ではないと思いますが、データを世界に見せたい場合を除き、0777許可(world-writeable)にしたくないことは間違いありません。ファイルが存在する場合、INTO OUTFILE
が機能しないため、プロセスをすすいで繰り返したい場合、潜在的な問題があります。ファイルが別のユーザーによって所有されている場合、unlink($file)
を実行しようとしても機能しません。私のような人(0777についての妄想)の場合は、次を使用してターゲットディレクトリを設定できます。
chmod($dir,0777)
sQLコマンドを実行する直前に、
chmod($dir,0755)
直後に、unlink(file)
を続けてファイルを削除します。これにより、すべてがWebユーザーの下で実行され、mysqlユーザーを呼び出す必要がなくなります。