mysql 大数据进行导出成csv文件

我们先看一下对比

直接navicat进行数据查找

image

Mysql服务中直接导出

image

直接在数据库服务器上将数据导出成固定文件,并指定格式,gbk格式是可以被csv文件识别的,不会乱码 默认不加格式是utf-8的

SELECT * FROM waybill where created >='2020-11-01' and created <'2020-12-01' INTO OUTFILE '/var/lib/mysql-files/11month.csv' character set gbk FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' ;

如果导出来的文件太大,EXCEL打不开,EXCEL最高支持一百零几万的数据打开,超过的会被舍弃,这里可以用命令进行拆分成多个文件

Linux split命令用于将一个文件分割成数个。
该指令将大文件分割成较小的文件,在默认情况下将按照每1000行切割成一个小文件。

split -50000 11month.csv 这样会把这个文件按照每五万行拆成一个文件,xaa,xab这样的文件,可以自己给后缀名。

遇到的问题及解决

mysql> SELECT * FROM config_value INTO OUTFILE '/tmp/runoob.txt' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n';
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

这需要看一下mysql 是否允许你自定义文件存储,不允许就按照它指定的目录存储即可 为null即表示你可以随意存储

SHOW VARIABLES LIKE "secure_file_priv";
image

将切割后的文件,即可从服务器上down下来

扩展

使用 SELECT ... INTO OUTFILE 语句导出数据

以下实例中我们将数据表 runoob_tbl 数据导出到 /tmp/runoob.txt 文件中:

mysql> SELECT * FROM runoob_tbl 
    -> INTO OUTFILE '/tmp/runoob.txt';

你可以通过命令选项来设置数据输出的指定格式,以下实例为导出 CSV 格式:

mysql> SELECT * FROM passwd INTO OUTFILE '/tmp/runoob.txt'
    -> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
    -> LINES TERMINATED BY '\r\n';

在下面的例子中,生成一个文件,各值用逗号隔开。这种格式可以被许多程序使用。

SELECT a,b,a+b INTO OUTFILE '/tmp/result.text'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM test_table;

SELECT ... INTO OUTFILE 语句有以下属性:

LOAD DATA INFILE是SELECT ... INTO OUTFILE的逆操作,SELECT句法。为了将一个数据库的数据写入一个文件,使用SELECT ... INTO OUTFILE,为了将文件读回数据库,使用LOAD DATA INFILE。
SELECT...INTO OUTFILE 'file_name'形式的SELECT可以把被选择的行写入一个文件中。该文件被创建到服务器主机上,因此您必须拥有FILE权限,才能使用此语法。
输出不能是一个已存在的文件。防止文件数据被篡改。
你需要有一个登陆服务器的账号来检索文件。否则 SELECT ... INTO OUTFILE 不会起任何作用。
在UNIX中,该文件被创建后是可读的,权限由MySQL服务器所拥有。这意味着,虽然你就可以读取该文件,但可能无法将其删除。

posted @ 2021-04-15 17:00  darling331  阅读(1145)  评论(2编辑  收藏  举报