需求复现
我们需要将mysql查询的结果直接以csv格式的形式写入文件系统,以便能够使用其他脚本语言读入并进行分析,此时我们可以使用如下sql代码进行操作:
select
a,b, ...
INTO OUTFILE 'file.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
from table;
在进行上述操作前,我们需要对mysql数据库进行一系列设置,使其能够满足将查询结果写入文件系统的要求
设置mysql数据库
session
在session中能够生效的方法如下
SHOW VARIABLES LIKE 'secure_file_priv';
SET GLOBAL secure_file_priv = 'your_valid_path';
set global local_infile = 1;
需要注意的是,该设置只能保证在目前session中写入secure_file_priv指定文件夹时mysql能够给予权限,并且我们需要同时修改secure_file_priv指定文件夹的写入权限,最一劳永逸的做法是:
> sudo chmod 777 your_valid_path
global
如果mysql报错[ERROR]11290 - The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
那么我们需要通过修改配置文件my.cnf的方式进行设置
在mac中,mysql服务器被安装在/usr/local/mysql
文件夹中,而启动设置文件保存在/etc
文件夹中。
进入/etc
文件夹后,mysql默认不存在my.cnf文件,我们需要手动生成该文件,并在文件中写入:
> sudo touch my.cnf
> sudo vim my.cnf
--------------------
[mysqld]
secure_file_priv = your_valid_path
然后重启mysql服务器,该功能就可以实现。