MySQL 8 查询输出到文件,Ubuntu系统需要配置secure_file_priv

原创 创建时间:2019-01-25 访问量:143 赞:0 踩:0

要将SELECT查询输出到文件,你需人FILE权限,FILE是全局的,不能仅限定于某个特定的数据库,但可以限制用户的FILE权限:

mysql> GRANT SELECT ON employees.* TO
'user_ro_file'@'%' IDENTIFIED WITH
mysql_native_password AS
'*EBD9E3BFD1489CA1EB0D2B4F29F6665F321E8C18';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> GRANT FILE ON *.* TO 'user_ro_file'@'%'
IDENTIFIED WITH mysql_native_password AS
'*EBD9E3BFD1489CA1EB0D2B4F29F6665F321E8C18';
Query OK, 0 rows affected, 1 warning (0.00 sec)

如果是Ubuntu系统,黙认情况下,MySQL是不允许用户将查询结果写出到文件的。但可以通过在配置文件中设置secure_file_priv并重启MySQL服务后启用。

在MySQL配置文件中添加secure_file_priv = /var/lib/mysql:

shell> sudo vi
/etc/mysql/mysql.conf.d/mysqld.cnf

重启MySQL服务

shell> sudo systemctl restart mysql

将查询结果保存到CSV文件中:

# FIELDS TERMINATED BY ‘,’是以逗号分隔
# OPTIONALLY ENCLOSED BY ' " ',以双引号包裹字段值
# LINES TERMINATED BY '\n',以\n分隔行
mysql> SELECT first_name, last_name INTO OUTFILE 'result.csv'  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED  BY '"'  LINES TERMINATED BY '\n' FROM employees WHERE hire_date<'1986-01-01' LIMIT 10;

Query OK, 10 rows affected (0.00 sec)

你可以在/var/lib/mysql/employees/这个目录下找到这个文件。

也可以将SELECT查询的结果保存到另一个表中,这个表可以存在也可以不存在:

# 当表不存在时,使用CREATE
mysql> CREATE TABLE titles_only AS SELECT DISTINCT
title FROM titles;
Query OK, 7 rows affected (0.50 sec)
Records: 7 Duplicates: 0 Warnings: 0

# 当表存在时,使用INSERT
mysql> INSERT INTO titles_only SELECT DISTINCT title
FROM titles;
Query OK, 7 rows affected (0.46 sec)
Records: 7 Duplicates: 0 Warnings: 0

如果在使用INSERT时避免重复,可以使用INSERT IGNORE,但这需要有主键才行,因为上面的示例中是没有主键的,所示差别不大。

评论
 我想说:
==已经到底了==
关注: 粉丝: 积分:
工联信息网
如有问题请致邮箱:need@glxxw2018.com(仅限本站无法查询到的资料);本站能够查询到的资料请关注“工联信息网”公众号,通过页面提供的资源码查询!
不良信息反馈及侵权投诉建议请致邮箱:accusation@glxxw2018.com