从SQL查询问题下载CSV

时间:2018-08-24 08:14:53

标签: mysql sql database csv mysql-workbench

当我运行以下查询时:

SELECT * FROM selecteddb.mytable 
where time between "2018-08-06 00:00:00" and "2018-08-13 00:00:00"
INTO outfile "~/stats.csv" 
FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n';

我收到以下错误:

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

但是当我只运行不带outfile的查询时,它运行得很好。

我正在使用MySQL Workbench和Mac运行查询。

1 个答案:

答案 0 :(得分:1)

您的admin用户似乎没有Pic特权。您可以授予该权限,它将起作用。

GRANT FILE ON * . * TO 'admin'@'%';
  

SELECT的SELECT ... INTO OUTFILE'file_name'形式写入   选定的行到文件。该文件是在服务器主机上创建的,因此   您必须具有FILE特权才能使用此语法。 file_name不能   是现有文件,除其他功能外,还可以防止诸如   / etc / passwd和数据库表不会被破坏。的   character_set_filesystem系统变量控制解释   文件名。

FILE

================================================ ==========

还请注意,mysql服务器需要对您提供的路径具有写权限。

  

FILE特权还使用户可以在任何位置创建新文件   MySQL服务器具有写访问权的目录。这包括   服务器的数据目录,其中包含实现   权限表。

如果您以以下方式执行查询:

SELECT * FROM selecteddb.mytable ..... INTO outfile "~/stats.csv";

这将尝试在主目录中创建文件。如果省略路径,仅保留文件名,它将在Mysql的数据目录中创建。 (在我的Ubuntu计算机中为/var/lib/mysql)。

所以这应该没问题。

SELECT * FROM selecteddb.mytable ..... INTO outfile "stats.csv";

希望有帮助!!