mysql 千万级数据的导入导出
Posted 一生一世的陪伴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
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 分隔符
terminated by分隔符:意思是以什么字符作为分隔符
enclosed by字段括起字符
escaped by转义字符
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\';
以上是关于mysql 千万级数据的导入导出的主要内容,如果未能解决你的问题,请参考以下文章