MySQL导出csv格式

今天需要用mysql导出CSV格式,给数据团队,发现其中有几个坑,记录一下

  • SQL语句
1
2
SELECT * 
INTO OUTFILE "/tmp/tes.csv" FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' FROM TBL1

  • 提示SQL错误
1
ERROR 1045 (28000): Access denied for user 'usr'@'%'

这个不是因为数据库账号的密码有问题,而是该用户没有FILE权限,这个权限在腾讯云MySQL中默认没有,所有我只能导出到本地测试


  • 另一个错误提示
1
The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

默认情况下,MySQL 导出文件时,只能使用安全目录,可以通过

1
SHOW VARIABLES LIKE "secure_file_priv";

查看情况。这里的修改方案

修改my.cnf 或则my.inimysqld中的字段secure-file-priv

1
2
3
4
5
6
[mysqld]
secure_file_prive=null #限制mysqld 不允许导入导出

secure_file_priv=/tmp/ #限制mysqld的导入导出只能发生在/tmp/目录下

secure_file_priv='' #关闭,不对mysqld的导入导出做限制

并重启mysql服务


遗留问题

在导出CSV的时候,只能导出数据,不能带有表的字段名。虽然通过网上的方法

1
select * into outfile '/tmp/xxxx.csv' fields terminated by ',' lines terminated by '\n' from (select 'col1','col2','col3','col4' union select column1,column2,column3,column4 from table_name) b

依然没有效果,回头继续尝试一下