当我运行以下查询时:
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运行查询。
答案 0 :(得分:1)
您的admin
用户似乎没有特权。您可以授予该权限,它将起作用。
GRANT FILE ON * . * TO 'admin'@'%';
SELECT的SELECT ... INTO OUTFILE'file_name'形式写入 选定的行到文件。该文件是在服务器主机上创建的,因此 您必须具有FILE特权才能使用此语法。 file_name不能 是现有文件,除其他功能外,还可以防止诸如 / etc / passwd和数据库表不会被破坏。的 character_set_filesystem系统变量控制解释 文件名。
================================================ ==========
还请注意,mysql服务器需要对您提供的路径具有写权限。
FILE特权还使用户可以在任何位置创建新文件 MySQL服务器具有写访问权的目录。这包括 服务器的数据目录,其中包含实现 权限表。
如果您以以下方式执行查询:
SELECT * FROM selecteddb.mytable ..... INTO outfile "~/stats.csv";
这将尝试在主目录中创建文件。如果省略路径,仅保留文件名,它将在Mysql的数据目录中创建。 (在我的Ubuntu计算机中为/var/lib/mysql
)。
所以这应该没问题。
SELECT * FROM selecteddb.mytable ..... INTO outfile "stats.csv";
希望有帮助!!