【问题标题】:Download CSV from SQL query issue从 SQL 查询问题下载 CSV
【发布时间】:2019-01-30 16:21:35
【问题描述】:

当我运行以下查询时:

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 来运行查询。

【问题讨论】:

  • 假设您实际上已登录到工作台并运行查询,我的猜测是 MySQL 在~/stats.csv 没有写权限。所以,你应该调查一下。
  • 您似乎遇到了权限问题。
  • 你知道这会在主机中创建文件吗?

标签: mysql sql database csv mysql-workbench


【解决方案1】:

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

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

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

https://dev.mysql.com/doc/refman/8.0/en/select-into.html

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

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

FILE 权限还允许用户在任何 MySQL 服务器具有写入权限的目录。这包括 服务器的数据目录,包含实现 权限表。

如果你执行你的查询:

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

这将尝试在主目录中创建文件。如果省略路径而只留下文件名,它将在 Mysql 的数据目录中创建。 (/var/lib/mysql 在我的 Ubuntu 机器上)。

所以这应该没有任何问题。

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

希望对你有帮助!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    相关资源
    最近更新 更多