我试图使用SELECT到OUTFILE将一个文件写入另一个目录中的自定义目录,该目录比我的文档根目录高一级。我可以写信给/tmp,这样我就知道其他一切都正常了。
我正在使用文件的绝对完整路径。我能够用PHP创建目录和chmod到0777。成功创建目录并正确设置模式(通过SSH和FTP查看)。
我想使用的路径示例:
/var/www/vhosts/mysite/private_www/data_export/newdir/我曾想过,只要目录具有世界可读性/可写性/可执行性,MySQL就能够写入目录。但我还是会犯这个错误。
无法创建/写入文件(错误代码: 13)
我已经找到了很多关于这个错误的帖子,但是除了写到/tmp之外,没有其他的解决方案。然而,如果我写到/tmp,我必须添加更多的代码来处理文件名,然后将文件复制到我想要的位置。
我想,也许我需要一条与MySQL不同的路径。有没有一种方法可以检查MySQL认为什么是服务器根目录?但是,我不确定这可能是问题所在,因为我能够使用相同的路径加载数据INFILE。
我的圈套
我遗漏了什么?
发布于 2013-12-09 20:55:26
尽管您对目标目录正确设置了可写权限,但为了让用户将目录树遍历到目标目录,必须在导入目标目录的每个较高目录上为该用户提供执行权限。这是因为在目录上下文中,execute实际上意味着在目录中查找列表内容。
这意味着路径中每个目录的最小(忽略所有者/组权限)。
/var/www/vhosts/mysite/private_www/data_export将是0751,其中最后的1是“其他”用户类别的执行权限。因此,请验证目标路径中的每个目录至少对MySQL服务器用户具有执行权限(可能是CentOS系统中的mysql )。
允许对所有这些目录执行(列表-内容)确实意味着任何系统用户都可以检查它们,而不仅仅是MySQL用户。在您决定最终路径的位置时,请考虑这一点。如果可以的话,您可能希望将它与www文件分开。
在您的设置中,您已经将目标目录设置为0777、世界可读的、世界可写的.如果可以避免,那是不可取的。由于所有这些都是MySQL能够写信给它所必需的,所以可以考虑将其组所有权改为mysql组。这将使您避免使它的世界可写。
# Give group ownership to mysql
chown :mysql /var/www/vhosts/mysite/private_www/data_export/newdir
# And just make it writable by the group, not everyone
chmod 0770 /var/www/vhosts/mysite/private_www/data_export/newdirhttps://stackoverflow.com/questions/20479662
复制相似问题