从sql查询下载csv问题

zqdjd7g9  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(264)

当我运行以下查询时:

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工作台和mac来运行查询。

k3fezbri

k3fezbri1#

它看起来像你的 admin 用户没有文件权限。你可以授予许可,它就会工作。

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

选择。。。select的“文件名”形式将所选行写入文件。文件是在服务器主机上创建的,因此您必须具有文件权限才能使用此语法。文件名不能是现有文件,这样可以防止/etc/passwd和数据库表等文件被破坏。character \u set \u 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";

希望有帮助!!

相关问题