MySQL导出查询结果到文件中
2019-10-11 本文已影响0人
OLDBIG9
方式一:
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%";

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文件时不太方便
建议使用第一种方式