MySQL导出查询结果到文件中

方式一:

SELECT 
    id, name
FROM
    artiles
WHERE
    name LIKE '%名%'
    OR intro LIKE '%名%' 
INTO OUTFILE 'my_data.csv' 
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"' 
LINES TERMINATED BY '\n';

可能会出现的问题:
1.secure_file_priv,查看变量得知默认只能导出到/var/lib/mysql-files/目录中

mysql> show variables like 'secure_file_priv';
+------------------+-----------------------+
| Variable_name    | Value                 |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+

该配置是指定允许导出到具体的某个目录中,不能通过命令行的方式直接修改:

mysql> set secure_file_priv = '/home/';
ERROR 1238 (HY000): Variable 'secure_file_priv' is a read only variable

编辑mysql配置文件修改此项配置

[mysqld_safe]
#secure_file_priv:NULL:不允许导出, 具体路径:只能导出到该路径中,空:不限制导出目录
secure_file_priv = 

重启mysql

systemctl restart mysql

2.创建文件权限问题

mysql> select * from articles into outfile '/home/tmp/table.csv' fields terminated by ',' optionally enclosed by '"' escaped by '"' lines terminated by '\n';
ERROR 1 (HY000): Can't create/write to file '/home/tmp/table.csv' (Errcode: 13 - Permission denied)

解决方式:
1.chmod -R 777 /home/tmp
2.setfacl -R -m user:mysql:rwx /home/tmp
3.修改mysql默认的导出目录
查看当前默认目录:
mysql> show variables like "%secure_file_priv%";

Snipaste_2020-01-15_13-16-52.png.png

secure_file_priv为null    表示不允许导入导出
secure_file_priv指定文件夹时,表示mysql的导入导出只能发生在指定的文件夹
secure_file_priv没有设置时,则表示没有任何限制

临时修改或修改配置文件均可,但是线上不建议这么操作

方式二:

mysql -h服务器 -u用户名 -p密码 --default-character-set=utf8 -e "select语句" > /home/tmp/csv表名.csv

缺点就是不能指定字段间隔符和换行符,导出为csv文件时不太方便
建议使用第一种方式

你可能感兴趣的:(MySQL导出查询结果到文件中)