MYSQL进入outfile“访问被拒绝” – 但我的用户有“所有”访问..该文件夹是CHMOD 777
有任何想法吗?
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;
看起来你连接到数据库有问题,而不是写你提到的文件夹。
此外,请确保您已授予用户'asdfsdf'@'localhost'
FILE
。
> 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临时文件夹,我不认为它真的很重要,但是你绝对不想让它成为世界可写的权限,除非你想让世界看到你的数据。 如果你想冲洗 – 重复这个过程是有潜在的问题,因为如果文件存在, INTO OUTFILE
将不起作用。 如果你的文件是由不同的用户拥有,那么试图unlink($file)
将无法正常工作。 如果你像我一样(偏执约0777),那么你可以使用以下设置你的目标目录:
chmod($dir,0777)
然后在执行SQL命令之前
chmod($dir,0755)
之后立即,然后unlink(file)
删除该文件。 这将保持它在你的web用户下运行,而不需要调用mysql用户。