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

2022-08-30 10:30:04

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

SELECT email INTO OUTFILE "mydata.csv"
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY "\n"
FROM users;

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

任何想法这个文件被存储在哪里?

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


答案 1

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

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

指定要写入的路径,如:

INTO OUTFILE '/tmp/mydata.csv'

请注意,MySQL会将文件写入MySQL服务器上,而不是客户端计算机上。因此,远程连接将在远程服务器上创建输出文件。另请参阅选择“进入本地文件”?,了解更多详细信息和解决方法。

Systemd & Linux

关于在运行 systemd 的 Linux 系统上写入 /tmp 的说明

最初发布此内容几年后,我发现自己无法找到通过/tmp

...INTO OUTFILE '/tmp/outfile.csv'

在 MariaDB 5.5 服务器上运行 Fedora Linux with .该目录和文件不是按指定方式直接写入,而是在 以下位置创建:systemd/tmp/outfile.csv/tmp

/tmp/systemd-mariadb.service-XXXXXXX/tmp/outfile.csv

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

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


答案 2

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

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


推荐