在Web应用程序上下文中使用mysql INTO OUTFILE

时间:2019-03-18 21:29:09

标签: php mysql file-permissions tmp

我想将数据从mysql快速导出到输出文件。事实证明,INTO OUTFILE语法似乎比我在PHP性能方面可以执行的任何处理都要先进。但是,这种方法似乎存在很多问题:

  1. 只能在/ tmp或/ var / lib / mysql /中创建输出文件(mysqld用户需要写权限)
  2. 输出文件的所有者和组将是 设置为mysqld
  3. tmp dir由于诸如“ private tmp”之类的设置而非常像垃圾箱。

在管理用户帐户/文件权限方面,我将如何以一种噩梦般的方式来管理它? 我需要从我的php脚本访问输出文件,并且如果可能的话,我也想将此文件输出到应用程序目录。当然,如果还有另一种以有效的方式导出查询结果的方法,我想知道。

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

  • 将mysqld用户添加到“ www-data”组中以提供对应用程序文件的访问权限,写入应用程序目录,其他www-data用户将希望能够访问输出文件。

1 个答案:

答案 0 :(得分:1)

我无法获得适用于mysql用户的访问权限。使用脚本将用户添加到www-data组或采取其他类似措施也将增加应用程序部署的开销。

我决定继续使用带有symfony Process组件的程序管道方法。

mysql -u <username> -p<password> <database> -e "<query>" | sed 's/\t/","/g;s/^/"/;s/$/"/;' > /output/path/here.csv

请注意,如果您的列中包含诸如\,“ \ n等”保留字符的值,则csv格式可能会中断。您还需要转义这些字符(例如,“ \”),并可能需要执行某些操作关于mysql将null值输出为NULL(字符串)。