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所说,

  1. GRANT ALL并不意味着GRANT FILE
  2. 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用户。