MySQL into outfile secure-file-priv

MySQL的INTO OUTFILE功能默认受限于secure_file_priv参数。当该参数非空时,需确保导出路径在指定目录下。无法通过`set global`修改此参数,需编辑my.cnf配置文件,重启MySQL服务。导出文件时,路径必须存在且与MySQL环境匹配。此外,可通过特定SQL语句添加列名到导出文件。

MySQL可以使用 into outfile 做文件的直接倒出,但是,数据库默认这个服务是没有开启的,直接运行select * from XXX into outfile ‘xxx.xlsx’;,则会报如下错误:

[HY000][1290] The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

show global variables like ‘%secure_file_priv%’;
secure_file_priv参数用于限制LOAD DATA, SELECT …OUTFILE, LOAD_FILE()传到哪个指定目录。

secure_file_priv 为 NULL 时,表示限制mysqld不允许导入或导出。
secure_file_priv 为 /tmp 时,表示限制mysqld只能在/tmp目录中执行导入导出,其他目录不能执行。
secure_file_priv 没有值时,表示不限制mysqld在任意目录的导入导出。
因为 secure_file_priv 参数是只读参数,不能使用set global命令修改

解决方法

打开my.cnfmy.ini,加入以下语句后重启mysql。

secure_file_priv=''
service mysql restart

此时再执行:

select a.权益名称,a.销售品NBR from `权益相关销售品(0103)` a into outfile '/data/mysql/20200610Data.xlsx';

倒出成功。
注意:
倒出的路径必须存在,且为当前MySQL安装的环境下的路径,比如是linux的,则路径为linux的,否则会报路径找不到的错误。
倒出成功后,在该路径下可以看到该倒出文件。
[root@VM_0_11_centos mysql]# ll
total 1173996
-rw-rw-rw- 1 mysql mysql 1577 Jun 10 11:41 20200610Data.xlsx

使用MySQL into outfile 倒出成功。

但是列名却没有,但是却可以通过修改sql语句的方法加上表头,具体实现方法是在查找数据的时候并上列名:
select * from 权益相关销售品(0103) a into outfile ‘/data/mysql/20200610Data.xlsx’ fields terminated by ‘\t’ OPTIONALLY ENCLOSED BY ‘"’ lines terminated by ‘\n’ from (select ‘权益名称’,‘销售品NBR’ union select 权益名称,销售品NBR from table) b;

还有,MySQL支持直接导入文件
load data infile xxx into Table ‘zxzcd’;
不推荐使用SQL进行文件数据的导入,因为,一不小心就是坑~~

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值