mysql 千万级数据的导入导出

最近应公司要求,在做数据库的导入导出。经查询每天的数据量在350W条左右。经过大量测试,感觉以下方法比较好

   数据导出SELECT INTO…OUTFILE

 基本语法:

SELECT  

[INTO OUTFILE 'file_name'  

        [CHARACTER SET charset_name]  

        export_options  

      | INTO DUMPFILE 'file_name'  

      | INTO var_name [, var_name]]  

该语句分为两个部分。前半部分是一个普通的SELECT语句,通过这个SELECT语句来查询所需要的数据;后半部分是导出数据的。其中,“目标文件”参数指出将查询的记录导出到哪个文件中;“OPTION”参数为可选参数选项,其可能的取值有:

    • FIELDS TERMINATED BY '字符串':设置字符串为字段之间的分隔符,可以为单个或多个字符。默认值是“\t”。
    • FIELDS ENCLOSED BY '字符':设置字符来括住字段的值,只能为单个字符。默认情况下不使用任何符号。
    • FIELDS OPTIONALLY ENCLOSED BY '字符':设置字符来括住CHAR、VARCHAR和TEXT等字符型字段。默认情况下不使用任何符号。
    • FIELDS ESCAPED BY '字符':设置转义字符,只能为单个字符。默认值为“\”。
    • LINES STARTING BY '字符串':设置每行数据开头的字符,可以为单个或多个字符。默认情况下不使用任何字符。
    • LINES TERMINATED BY '字符串':设置每行数据结尾的字符,可以为单个或多个字符。默认值是“\n”。FIELDS和LINES两个子句都是自选的,但是如果两个子句都被指定了,FIELDS必须位于LINES的前面。

例子: 

        SELECT * INTO OUTFILE 'E:/data.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM dl.datas

        导出结果:

       

 


 

 

     数据导入load data infile

基本语法:
load data [low_priority] [local] infile 'file_name txt' [replace | ignore]
into table tbl_name
[fields
[terminated by't']
[OPTIONALLY] enclosed by '']
[escaped by'\' ]]
[lines terminated by'n']
[ignore number lines]
[(col_name, )]

load data infile语句从一个文本文件中以很高的速度读入一个表中。使用这个命令之前,mysqld进程(服务)必须已经在运行。为了安全原因,当读取位于服务器上的文本文件时,文件必须处于数据库目录或可被所有人读取。另外,为了对服务器上文件使用load data infile,在服务器主机上你必须有file的权限。

1 如果你指定关键词low_priority,那么MySQL将会等到没有其他人读这个表的时候,才把插入数据。可以使用如下的命令: 

        load data low_priority infile "/home/mark/data sql" into table Orders;

2 如果指定local关键词,则表明从客户主机读文件。如果local没指定,文件必须位于服务器上。

3 replace和ignore关键词控制对现有的唯一键记录的重复的处理。如果你指定replace,新行将代替有相同的唯一键值的现有行。如果你指定ignore,跳过有唯一键的现有行的重复行的输入。如果你不指定任何一个选项,当找到重复键时,出现一个错误,并且文         本文件的余下部分被忽略。例如:load data low_priority infile "/home/mark/data sql" replace into table Orders;

4 分隔符

(1) fields关键字指定了文件记段的分割格式,如果用到这个关键字,MySQL剖析器希望看到至少有下面的一个选项: 
       terminated by分隔符:意思是以什么字符作为分隔符
       enclosed by字段括起字符
      escaped by转义字符
       terminated by描述字段的分隔符,默认情况下是tab字符(\t) 
       enclosed by描述的是字段的括起字符。
     escaped by描述的转义字符。默认的是反斜杠(backslash:\ )
 

例子

load data low_priority local infile "E:/data.txt" replace into table datas fields terminated by ',' enclosed by '"' escaped by '"' lines terminated by '\n';

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL导入千万级数据可以使用多种方法,以下是两种常用的方法: 1. 使用MySQL自带的导入工具:MySQL提供了多个导入工具,如`mysql`命令行工具和`LOAD DATA INFILE`语句。你可以使用这些工具将数据文件导入MySQL数据库中。具体步骤如下: - 将数据保存为文本文件,每行代表一条记录。 - 使用`mysql`命令行工具登录到MySQL数据库。 - 创建目标表,确保表结构与数据文件中的数据一致。 - 使用`LOAD DATA INFILE`语句将数据文件导入到目标表中。 例如,假设你有一个名为`data.txt`的数据文件,其中包含千万条记录,你可以使用以下命令将数据导入MySQL数据库中: ```shell mysql -u username -p password -h hostname -P port dbname LOAD DATA INFILE '/path/to/data.txt' INTO TABLE tablename; ``` 2. 使用第三方工具:除了MySQL自带的导入工具,还有一些第三方工具可以帮助你快速导入千万级数据。例如,`mysqldump`工具可以将数据导出为SQL文件,然后使用`mysql`命令行工具将SQL文件导入到目标数据库中。另外,一些ETL工具(如Talend、Pentaho)也提供了数据导入功能,可以更加灵活地处理大数据量的导入。 请注意,导入千万级数据可能需要较长的时间和较大的系统资源。为了提高导入速度,你可以考虑以下几点: - 使用合适的硬件设备和网络环境,确保数据库服务器具有足够的计算和存储资源。 - 对数据文件进行预处理,如拆分成多个小文件,以便并行导入。 - 调整MySQL服务器的配置参数,如`innodb_buffer_pool_size`、`innodb_log_file_size`等,以优化导入性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值