在 Web 应用程序上下文中使用 mysql INTO OUTFILE
Using mysql INTO OUTFILE in web application context
我想将数据从 mysql 快速导出到输出文件。事实证明,INTO OUTFILE 语法似乎比我在 PHP performance wise 中可以进行的任何类型的处理都遥遥领先。然而,这种方法似乎问题重重:
- 只能在 /tmp 或 /var/lib/mysql/ 中创建输出文件(mysqld 用户需要写入权限)
- 输出文件所有者和组将是
设置为 mysqld
- tmp 目录由于像 "private tmp" 这样的设置而几乎是一个垃圾箱火。
我如何以一种在管理用户帐户/文件权限方面不是噩梦的方式来管理它?
我需要从我的 php 脚本访问输出文件,如果可能的话,我还想将该文件输出到应用程序目录。当然,如果有另一种方法可以以高效的方式导出我的查询结果,我很想知道。
目前我正在考虑以下方法:
- 将 mysqld 用户添加到 "www-data" 组以授予对应用程序文件的访问权限,写入应用程序目录和其他 www-data 用户将有望能够访问输出文件。
我无法获得 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(字符串)的事情。
我想将数据从 mysql 快速导出到输出文件。事实证明,INTO OUTFILE 语法似乎比我在 PHP performance wise 中可以进行的任何类型的处理都遥遥领先。然而,这种方法似乎问题重重:
- 只能在 /tmp 或 /var/lib/mysql/ 中创建输出文件(mysqld 用户需要写入权限)
- 输出文件所有者和组将是 设置为 mysqld
- tmp 目录由于像 "private tmp" 这样的设置而几乎是一个垃圾箱火。
我如何以一种在管理用户帐户/文件权限方面不是噩梦的方式来管理它? 我需要从我的 php 脚本访问输出文件,如果可能的话,我还想将该文件输出到应用程序目录。当然,如果有另一种方法可以以高效的方式导出我的查询结果,我很想知道。
目前我正在考虑以下方法:
- 将 mysqld 用户添加到 "www-data" 组以授予对应用程序文件的访问权限,写入应用程序目录和其他 www-data 用户将有望能够访问输出文件。
我无法获得 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(字符串)的事情。