Mysql是我们早期很多互联网公司都在使用一款开源数据库,方便和易用性可以跟常用开发语言可以高效兼容在业界开发者得到高度的认同,今天我来说说这个mysql导入和导出使用方式。自从两三年前把自己架构重心慢慢转到DB中。就对相关自己比较喜欢数据库做一些更深入研究,这次不讲它的集群,主从,以及相关mysql性能。主要就是讲讲我现在做为大数据导入和导出时碰到一些问题进行一些说明和介绍。
平时运营和产品经常会过说我现在有几千万数据或是说有几个亿数据想让你在半天左右时间帮我导入到DB中。这个问题刚开始让我有点疑惑。而且他们给出数据一行一条数据。如果使用insert的话至少也要插入时间要一天到两天左右。要是批量insert其实也需要一天左右时间。所以就去社区找找相关资料。得出结果就是可以使用LOAD DATA INFILE。想不到mysql也可以使用这个导入和导出数据。现在还是让我介绍这个东东。基本使用方式SQL语句都差不多。
导入语法如下:
LOAD DATA INFILE '/mnt/imgsvr/db/mysql/xxxx.csv' INTO TABLE table_name fields terminated by ',' (`reg_no`);
意思就是把一个csv数据文件按逗号分隔的方式把数据导入到一个表中,后面出现字段就是你要导入这个表中字段,这个可以说明一下csv数据文件按逗号分隔的。所以这里写的语法就是按逗号分隔,当然也可以不指明。那这个语句就会默认使用tab这个字符进行分隔来导入数据。
当然还有一种比较全面语法:
LOAD DATA INFILE '/mnt/imgsvr/db/mysql/xxxx.csv' INTO TABLE company_info fields terminated by ',' enclosed by '"' lines terminated by '\r\n'(`reg_no`);
相关意思就是跟上面差不多,只不过说明这个分隔字段数据采用双引号来标识。
对应导出语法如下:
SELECT reg_no INTO OUTFILE '/mnt/imgsvr/db/mysql/xxxx.csv' FIELDS TERMINATED BY '\,' FROM table_name;
意思就是把一张表中一个字段数据导出来并且以逗号来分隔。当然如果你不采用逗号来分隔的话, mysql就会自动采用tab字符来分隔
导出语法如下:
SELECT reg_no INTO OUTFILE '/mnt/imgsvr/db/mysql/xxxx.csv' FROM table_name;
当然也可以指明相关分隔字段中数据是否带上引号之类来区别一些字符内容,当然没有特别需要还是不需要也分隔字段中数据带上引号之类可以会变得复杂。
相关导入和导出语法已经介绍完毕。现在说说采用这种方式导入和导出有什么优点和缺点。
优点就是导入千万和亿万数据如果我的DB硬盘采用SSD的话,基上也就是几分钟到10几分钟事情。为什么这么快呢。也查过相关资料最后得出来应该这种方式全部写入后然后执行提交操作。这样子可以大提交导入和导出时间。
缺点就是导入导出时如果格式没有控制好,当然转移数据导入和导出数据会进行错格。这个问题还是比较好解决的。导入和导出多加注意就可以了。还有一个缺点就是导入导出编码不能在文件中进行指明,比如说你导出数据文件在windows操作系统时,导入到linux时这种100%就会出现乱码。所以这里要提出来你导入和导出相关DB服务器最好是同一版本和相同操作系统上面。这样子可以防止乱码出现。
文章评论