解决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'
在调试过程中,首先报了用户权限问题:
于是更新了用户的权限:
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对通过文件导入导出作了限制,默认不允许。
可以使用如下命令查看配置
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生效,再执行脚本即可导出报表。