【问题标题】:Can't find the file created by outfile in MySQL在 MySQL 中找不到 outfile 创建的文件
【发布时间】:2012-07-14 03:06:50
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 它很可能在 MySQL 数据目录中(如 /var/lib/mysql)。要指定目录,请使用完整路径,例如 INTO OUTFILE '/tmp/mydata.csv'
  • @Michael 我在我的根目录中看不到 /var/lib/mysql 之类的东西。我的意思是没有这样的文件夹称为var。有办法吗?
  • 发生的有趣的事情是当我使用路径作为 /tmp/mydata.csv 时,查询被执行,但是,在我的根目录中没有名为 tmp 的文件夹! :s
  • @user1460822: 你是windows系统吗?地球上几乎每个 unix 系统都有 /tmp。在 Windows 上,您可能需要使用 c:\temp 并创建该目录
  • 我相信默认行为是将其写入所选数据库的目录,即在 MySQL 数据目录中(例如 /var/lib/mysql/mydatabase)。

标签: php mysql file file-io


【解决方案1】:

如果您没有指定绝对路径而是使用INTO OUTFILE 'output.csv'INTO OUTFILE './output.csv' 之类的东西,它会将输出文件存储到show variables like 'datadir'; 指定的目录中。

【讨论】:

    【解决方案2】:

    +1 到@michael-berkowski 我需要 windows 的答案是(正如他所说)

    MariaDB 的数据目录

    具体来说,我在名为“mydatabase”的数据库的数据文件夹中

    C:\Program Files\MariaDB 10.3\data\mydatabase

    【讨论】:

      【解决方案3】:

      如果 OS X 上的任何人遇到此问题,使用 homebrew 安装的 mysql 的默认输出位于 /usr/local/var/mysql/database-name/

      【讨论】:

        【解决方案4】:

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

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

        指定要写入的路径,如:

        INTO OUTFILE '/tmp/mydata.csv'
        

        请注意,MySQL 会将文件写入 MySQL 服务器,而不是您的客户端计算机。因此远程连接将在远程服务器上创建输出文件。有关更多详细信息和解决方法,另请参阅 SELECT INTO OUTFILE local ?

        系统和 Linux

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

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

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

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

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

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

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

        【讨论】:

        • 发生的有趣的事情是当我使用路径作为 /tmp/mydata.csv 时,查询被执行,但是,在我的根目录中没有名为 tmp 的文件夹! :s
        • @user1460822 如果这是共享主机,您可能只是将该文件写入系统的公共 /tmp 目录(您无法访问该目录)。它最终会被自动化脚本清除。您需要将文件写入您可以访问的位置,无论根目录中的哪个位置。如果您的根目录类似于/home/users/your_username/public_html,请使用它。
        • @MichaelBerkowski,我试图将文件放入/home/username/myfolder/。但我收到了Persmission denied 错误消息。我做了chmod 777 /home/username/myfolder,它仍然存在。是不是因为chmod只影响目录(不影响文件)?
        • 请注意,如果您的 mysql 服务器是远程的,它会将文件放在其文件系统中,而不是您的脚本所在的位置,您应该使用 scp 来获取它。
        • @OkiErieRinaldi 如果您尝试将其写入主目录,则需要确保 MySQL 守护程序用户可以遍历到其中,这意味着在 /home/usernamechmod o+x /home/username 上添加执行权限. Homedirs 通常除了拥有用户之外的所有人都无法访问,所以如果你想这样做,我建议添加执行权限,然后写入文件,然后立即撤销它chmod o-x /home/username。只要父目录已执行,目标目录上的 777 就应该工作。
        【解决方案5】:

        我找到了使用以下命令创建的 INTO OUTFILE 文件

        select name from users into outfile "name.csv"

        在以下位置

        C:\ProgramData\MySQL\MySQL Server 5.6\data\name.csv

        这可能是默认位置,因为我从未更改过任何内容。

        【讨论】:

          【解决方案6】:

          举例:

          我在 MySQL Workbench 中运行了以下查询,并且在

          中找到了我的文件
          SELECT * FROM `db`.`table` INTO OUTFILE 'file.csv' FIELDS TERMINATED BY ',';
          

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

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

          SELECT * FROM `db`.`table` INTO OUTFILE 'C:\\file.csv' FIELDS TERMINATED BY ',';
          

          【讨论】:

            【解决方案7】:

            您在C:\wamp\bin\mysql\mysql5.5.24\data 中找到该文件,但如果您关注select * from carro where id_cor<4 INTO OUTFILE 'C:\Users\Name\carro.txt';,则名称将是UsersNamecarro.txt

            所以只需写.....OUTFILE 'C:\carro.txt' 即可在data 文件夹中获取名为carro.txt 的文件

            【讨论】:

              【解决方案8】:

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

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

              【讨论】:

              • 是的......这是我在调查这个问题时遇到的确切问题。即使您在 MySQL 工作台上运行该命令,该文件也会在服务器上写出。一旦我弄清楚了,只需将文件 scp 到我的本地机器就很简单了。
              • 非常有价值的细节!
              猜你喜欢
              • 2016-04-10
              • 1970-01-01
              • 2014-05-05
              • 2023-03-26
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-04-01
              相关资源
              最近更新 更多