在MySQL中找不到outfile创建的文件

use*_*822 44 php mysql file-io file

我使用以下查询来创建CSV文件

SELECT email INTO OUTFILE "mydata.csv"
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY "\n"
FROM users;
Run Code Online (Sandbox Code Playgroud)

但是当我搜索filezilla时,我无法在任何地方找到mydata.csv文件.

知道这个文件存储在哪里吗?

查询成功运行,没有任何错误!任何帮助?

Mic*_*ski 58

MySQL可能正在将文件写入自己的数据目录,/var/lib/mysql/<databasename>例如.要指定路径,请使用完整路径.

但是,它必须是运行MySQL服务器守护程序的用户帐户可写的目录.出于这个原因,我经常使用/tmp:

指定要写入的路径,如下所示:

INTO OUTFILE '/tmp/mydata.csv'
Run Code Online (Sandbox Code Playgroud)

请注意,MySQL会将文件写在MySQL 服务器上,而不是在客户端计算机上.因此,远程连接将在远程服务器上创建输出文件.另请参见SELECT INTO OUTFILE local?了解更多详情和解决方法.

系统和Linux

关于/tmp在运行的Linux系统上写入的注意事项systemd:

在最初发布此文件几年后,我发现自己无法找到写入/tmpvia 的文件

...INTO OUTFILE '/tmp/outfile.csv'
Run Code Online (Sandbox Code Playgroud)

在运行Fedora Linux的MariaDB 5.5服务器上systemd.不是直接将文件写入/tmp/outfile.csv指定的,而是在systemd目录下创建了该目录和文件/tmp:

/tmp/systemd-mariadb.service-XXXXXXX/tmp/outfile.csv
Run Code Online (Sandbox Code Playgroud)

虽然文件outfile.csv本身和tmp/子目录都是全局可写的,但systemd服务目录本身具有700个权限并且是root拥有的,需要sudo访问权限才能检索其中的文件.

不是将MariaDB中的绝对路径/tmp/outfile.csv指定为并相对指定,而是outfile.csv将文件按预期编写到当前所选数据库的MariaDB数据目录中.


Shl*_*ach 19

我怀疑您正在客户端计算机上查找该文件.

SELECT .. INTO OUTFILE 将文件写入服务器计算机.


Nee*_*ngh 5

仅举个例子:

我在MySQL Workbench中运行了以下查询,并在中找到了我的文件

SELECT * FROM `db`.`table` INTO OUTFILE 'file.csv' FIELDS TERMINATED BY ',';
Run Code Online (Sandbox Code Playgroud)

D:\wamp\bin\mysql\mysql5.6.17\data\db\file.csv

您可以使用下面的示例来设置文件路径:

SELECT * FROM `db`.`table` INTO OUTFILE 'C:\\file.csv' FIELDS TERMINATED BY ',';
Run Code Online (Sandbox Code Playgroud)