用于导出的 INTO OUTFILE 查询在本地驱动器上不起作用

Posted

技术标签:

【中文标题】用于导出的 INTO OUTFILE 查询在本地驱动器上不起作用【英文标题】:INTO OUTFILE query for export is not working on local drive 【发布时间】:2015-04-15 12:02:13 【问题描述】:

使用: mysql 工作台

我正在尝试写入我的 MySQL 查询以使用当前日期 (orders_20150214.csv) 自动保存文件,但是即使基本保存(无日期)也不起作用,我不断收到服务器拒绝。

代码:

USE `databasename`;
Select   -- complex query from multiple tables -- 
-- Get Order data --

INTO OUTFILE 'E:\My Documents\2014-2015 Accs\ccccc\orders.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\n'

错误:

Error Code: 1045. Access denied for user 'dddddd'@'%.dddddddd' (using password: YES)  

我也尝试了上述的一些变体

USE `databasename`;
Select   -- complex query from multiple tables -- 
-- Get Order data --
FROM table_name  -- multiple tables --
INTO OUTFILE 'E:\My Documents\2014-2015 Accs\ccccc\orders.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'  

我知道 MySQL Workbench 有一个内置的“另存为”并且我使用它,但是有些日子我想运行查询,它会自动保存。我有一个宏,可以从 .csv 文件中检索数据并编译为正在运行的订单簿,我想进一步自动化它。

我也试过了:

INTO OUTFILE 'E:\\My Documents\\2014-2015 Accs\\dddd\\orders.csv'
INTO OUTFILE 'E:/My Documents/2014-2015 Accs/dddd/orders.csv'
-- http://dev.mysql.com/doc/refman/5.1/en/select-into.html

我已经阅读了关于是否可以以编程方式执行此操作以保存在本地计算机上的混合消息。所以可能无法直接通过 MySQL Workbench。

请帮忙:)

【问题讨论】:

请记住:您正在与可能在另一台机器上的 MySQL 服务器通信,可能以不同的用户身份运行。尝试将文件保存在 服务器 可以访问的位置。这可能就像与服务器共享本地驱动器一样简单,但很大程度上取决于您工作的安全环境。 @GordonLinoff 我想知道我的文件夹的权限。我不愿意分享我的“docs”文件夹,但是我可能会为此在其他地方创建一个 indi 文件夹。我将不得不谷歌。谢谢。 通常,有某种共享文件夹,您可以在其中创建文件,然后将其复制到本地计算机。 【参考方案1】:

我很确定您会收到 1045 错误,因为您的用户帐户需要在 MySQL 服务器中被授予 FILE 权限才能尝试 INTO OUTFILE 操作。

您或您友好的本地管理员可以通过这样的查询来做到这一点。

GRANT FILE  ON *.* TO 'user'@'host';

Gordon 提到的东西仍然是正确的:MySQL 服务器会将输出文件写入自己的文件系统,它写入的文件将归它所有。你需要复制它。

如果你在Windows系统上,你可以尝试使用%TEMP%环境变量扩展的路径...例如

INTO OUTFILE 'C:\\Users\\MrsAdmin\\AppData\\Local\\Temp\\orders.csv'

在 *nix 系统上,

INTO OUTFILE '/tmp/orders.csv'

会做同样的事情。然后,您可以将文件复制到您需要写入的任何位置。

【讨论】:

谢谢。我会检查我的设置,如果有效,我会回来并将其标记为答案,谢谢您的时间:D【参考方案2】:

请记住,您的 MySQL 服务器通常在与您的个人帐户不同的帐户下运行(在 Windows 上通常是“网络服务”)。此帐户没有“普通”文件夹的写入权限。您可以简单地创建一个导出文件夹并添加对其 ACL 具有读/写访问权限的“用户”。这将允许服务器在那里写入文件。

【讨论】:

以上是关于用于导出的 INTO OUTFILE 查询在本地驱动器上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

mysql 查询 into outfile 文件导到哪里去了?

mysql 存储过程中的select into outfile语句生成的文件放哪里

使用sql语句导出excel INTO OUTFILE

使用sql语句导出excel INTO OUTFILE

sql 导出数据 使用 into outfile

select into outfile