vlambda博客
学习文章列表

解决mysql查询结果导出到文本的报错问题

因考核需要,每个月需要出几张KPI的相关的报表,都是直接执行几条SQL做统计数据然后插入到新表中,思来想去,还是做成脚本,定期自动执行。


需要导出excel的SQL和脚本如下

select month as 月份, sysname as 系统,domain as 域名, sum_pv as 调用总数, reptime as '平均响应时间(毫秒)', sucess as '访问成功率(%)' from month where month ='202106' group bysysname into outfile '/tmp/1.xls'

 

在调试过程中,首先报了用户权限问题:

解决mysql查询结果导出到文本的报错问题

于是更新了用户的权限:

update mysql.user setFile_priv='Y' where user='kpireport';flush privileges;

但是再次执行的时候,还是报错了,提示 The MySQL server is running with the --secure-file-priv option soit cannot execute this statement

解决mysql查询结果导出到文本的报错问题

经文档查询,主要是因为部分版本的mysql对通过文件导入导出作了限制,默认不允许。

可以使用如下命令查看配置

show variables like '%secure_file_priv%';


value参数说明:

如果value值为null,则为禁止,

如果有文件夹目录,则只允许改目录下文件(测试子目录也不行),

如果为空,则不限制目录;

具体说明可参考 https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv

解决方法:

修改mysql配置文件my.cnf,在[mysqld] 下添加条目:secure_file_priv =表示不限制目录(等号一定要有,否则mysql无法启动)secure_file_priv = /home表示限制为csv文件导入导出到/home目录secure_file_priv=null不允许csv文件的导入导出secure_file_priv=/csv文件可导入到任意路径

修改完配置文件后重启mysql生效,再执行脚本即可导出报表。