Php 在web应用程序上下文中将mysql用于OUTFILE

Php 在web应用程序上下文中将mysql用于OUTFILE,php,mysql,file-permissions,tmp,Php,Mysql,File Permissions,Tmp,我想将数据从mysql快速导出到输出文件。事实证明,INTO-OUTFILE语法似乎比我在PHP性能方面所能做的任何处理都要快很多。然而,这一方案似乎充满了问题: 输出文件只能在/tmp或/var/lib/mysql/(mysqld用户需要写入权限)中创建 输出文件所有者和组将被删除 设置为mysqld tmp目录几乎是一个垃圾箱火灾,因为设置像“私有tmp” 在管理用户帐户/文件权限方面,我如何以一种不是噩梦的方式来管理它? 我需要从我的php脚本访问输出文件,如果可能的话,我还想将该文件输出

我想将数据从mysql快速导出到输出文件。事实证明,INTO-OUTFILE语法似乎比我在PHP性能方面所能做的任何处理都要快很多。然而,这一方案似乎充满了问题:

  • 输出文件只能在/tmp或/var/lib/mysql/(mysqld用户需要写入权限)中创建
  • 输出文件所有者和组将被删除 设置为mysqld
  • tmp目录几乎是一个垃圾箱火灾,因为设置像“私有tmp” 在管理用户帐户/文件权限方面,我如何以一种不是噩梦的方式来管理它? 我需要从我的php脚本访问输出文件,如果可能的话,我还想将该文件输出到应用程序目录。当然,如果有其他方法可以有效地导出查询结果,我想知道

    目前,我正在考虑以下方法:

    • 将mysqld用户添加到“www-data”组以访问应用程序文件、写入应用程序目录,其他www-data用户有望访问输出文件

    我无法获得mysql用户的访问权限。让脚本将用户添加到www数据组或其他此类措施也会增加应用程序部署开销

    我决定在symfony流程组件中使用程序管道方法

    mysql-u-p-e“| sed's/\t/”,“/g;s/^/“/;s/$/”/;”>/输出/path/here.csv


    请注意,如果您的列中有包含保留字符(如\、“\n等)的值,csv格式可能会中断。您还需要转义这些字符(例如“to\”),并可能对mysql将空值输出为空值(字符串)进行处理.

    可能重复^I知道如何写入其他目录,但问题在于权限。我可以写入我的应用程序目录,但显然mysqld用户没有访问此目录的权限。此外,文件输出时所有权设置为mysqld:mysqld,这意味着应用程序无法访问该文件。I现在没有MySQL框可供测试,但在MariaDB上,该文件是使用666个权限创建的;所有权与此无关。至于权限,这是dupe中的答案,不过另一个解决方案是写入到/tmp的子目录,该子目录与应用程序目录符号链接。