我正在尝试使用以下查询将MySQL中SQL查询的输出捕获到文本文件中。
select count(predicate),subject from TableA group by subject into outfile '~/XYZ/output.txt';
我收到以下错误。
错误1045(28000):用户’username’@’%’的访问被拒绝(使用密码:是)
任何想法,我要去哪里错了?这是与许可相关的问题吗?
Outfile是它自己在mysql中的权限。
如果您拥有全部,则包括在内。
但是,如果您只有一个安全的集合,例如SELECT,INSERT,UPDATE,DELETE,DROP,CREATE,但没有OUTFILE,则“ into outfile”将不适用于查询。
这样做的原因是,即使出于写入目的,从MySQL内部访问文件也存在一定的安全风险,因为如果从mysql访问文件,则可以访问mysql用户有权访问的任何文件,从而绕过基于用户的文件权限。
为了解决这个问题,您可以将查询直接运行到用来运行sql的任何shell /语言的输出中。
这是一个* nix的例子
>$ echo "select count(predicate),subject from TableA group by subject" | mysql -u yourusername -p yourdatabasename > ~/XYZ/outputfile.txt
但是,请在没有“ \”的一行上完成所有操作,或者使用“ \”来避免换行。
这里发生的是,您正在向mysql客户端运行查询,并随即吐出结果,然后将输出定向到文件。因此,永远不会从mysql内部调用该文件,而是在mysql运行后调用该文件。
因此,使用mysql来获取信息,然后将数据从您自己的用户shell中转储到文件中,就可以了。
或者,找到一种方法来获取自己的mysql权限,无论哪种方式。