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‘;

 

原文地址:https://www.cnblogs.com/yanglovezhi/p/8488309.html

时间: 2024-10-12 00:03:38

mysql 千万级数据的导入导出的相关文章

Mysql千万级数据删除实操-企业案例

某天,在生产环节中,发现一个定时任务表,由于每次服务区查询这个表就会造成慢查询,给mysql服务器带来不少压力,经过分析,该表中绝对部分数据是垃圾数据 需要删除,约1050万行,由于缺乏处理大数据的额经验,开始直接使用delete搭配where条件进行清理,最后执行了1个小时也没有完成,后来经过跟查询,1000万条数据 的删除需要几十个小时甚至上百小时,果断放弃,采用了迂回策略. 三步骤策略: 1.抽取需要保留的数据到备份表中 2.truncate旧表 3.备份的数据插入回来 通过以上思路果断在

MySQL存储引擎 SQL数据导入/导出 操作表记录 查询及匹配条件

MySQL存储引擎的配置 SQL数据导入/导出 操作表记录 查询及匹配条件 1 MySQL存储引擎的配置1.1 问题 本案例要求MySQL数据存储引擎的使用,完成以下任务操作: 可用的存储引擎类型 查看默认存储类型 更改表的存储引擎 1.2 步骤 实现此案例需要按照如下步骤进行. 步骤一:查看存储引擎信息 登入MySQL服务器,查看当前支持哪些存储引擎. 使用mysql命令连接,以root用户登入: [[email protected] ~]# mysql -u root –p Enter pa

mysql千万级数据量查询出所有重复的记录

查询重复的字段需要创建索引,多个条件则创建组合索引,各个条件的索引都存在则不必须创建组合索引 有些情况直接使用GROUP BY HAVING则能直接解决:但是有些情况下查询缓慢,则需要使用下面其他的方法 以下是本人整理出来的查询重复数据的SQL,适用于千万级数据量的MYSQL数据库. 1.适用于整数类型的 SELECT DISTINCT UId FROM vehicle WHERE 1=1 GROUP BY UId HAVING(COUNT(UId))>1; 2.分组排序 SELECT UId

mysql数据与Hadoop之间导入导出之Sqoop实例

前面介绍了sqoop1.4.6的 如何将mysql数据导入Hadoop之Sqoop安装,下面就介绍两者间的数据互通的简单使用命令. 显示mysql数据库的信息,一般sqoop安装测试用 sqoop list-databases --connect jdbc:mysql://192.168.2.101:3306/ --username root --password root 显示数据库里所有表: sqoop list-tables --connectjdbc:mysql://192.168.2.

【转】Mysql千万级数据表结构修改

当需要对表进行ddl操作如加索引.增删列时,数据量小时直接在线修改表结构影响不大当表达到百万.千万数据就不能直接在线修改表结构 下面是具体的过程:1.备份数据select * from ih_order into outfile '/bak/order.txt';mysql> select * from ih_order into outfile 'D:/bak/order.txt';Query OK, 10001000 rows affected (1 min 30.18 sec) 2.复制原

三十一.MySQL存储引擎 、 数据导入导出 管理表记录 匹配条件

1.MySQL存储引擎的配置 查看服务支持的存储引擎 查看默认存储类型 更改表的存储引擎 设置数据库服务默认使用的存储引擎 1.1 查看存储引擎信息 mysql> SHOW ENGINES\G 1.2 查看默认存储类型 mysql> SHOW VARIABLES LIKE 'default_storage_engine'; +------------------------+--------+ | Variable_name          | Value  | +-------------

MYSQL千万级数据量的优化方法积累

1.分库分表 很明显,一个主表(也就是很重要的表,例如用户表)无限制的增长势必严重影响性能,分库与分表是一个很不错的解决途径,也就是性能优化途径,现在的案例是我们有一个1000多万条记录的用户表members,查询起来非常之慢,同事的做法是将其散列到100个表中,分别从members0到members99,然后根据mid分发记录到这些表中,牛逼的代码大概是这样子: <?php for($i=0;$i< 100; $i++ ){ //echo "CREATE TABLE db2.mem

mysql中csv文件的导入导出

导出例子: select *from testinto outfile 'D:test.csv'fields terminated by ',' optionally enclosed by '"' escaped by '"'lines terminated by '\r\n'; 导入例子:load data infile 'D:test.csv' into table `test` fields terminated by ',' optionally enclosed by '&

mysql千万级数据优化查询

我们在做一个项目,一个网站或一个app时,用户量巨增,当使用的mysql数据库中的表数据达到千万级时,可以从以下方面考滤优化: 1.在设计数据库表的时候就要考虑到优化 2.查询sql语句上的优化 3.从数据库设计上进行结大框架的设计:如分区.分表.分库 1.在设计数据库表的时候就要考虑到优化 1.尽可能使用not null定义字段,避免null值字段出现,null值会占用额外的索引空间 2.使用固定长度的字段类型如char而不是varchar 3.添加索引,在查询频繁的字段上加索引,如在wher