合理使用mysql中的load data infile导入数据
发布:smiling 来源: PHP粉丝网 添加日期:2014-09-25 16:23:48 浏览: 评论:0
mysql中load data infile用来加载外部文件导入到mysql数据表中,针对于一般的小数据量的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的权限.
把千万级甚至亿级的数据写入mysql,实在是一件很让人头痛的事情.
load data local infile貌似是最快的方法了,可是load一个亿级的文件,仍然需要数十分钟.
如果有主从结构的话,在主服务器上面load数十分钟,文件数据会写入binary log,再传输到从服务器,然后从服务器也需要数十分钟来做load操作,如果从服务器只有一个sql_thread来执行binary log,那么在这数十分钟内,从服务器就只能做这一个load操作,无法对后续的sql语句做出响应,导致主从之间的延迟有数十分钟.
而且,如果load了20分钟,www.phpfensi.com然后发现数据源有问题,需要取消load,那么mysql至少还要20分钟才能回滚成功…这个时候非常无奈.
所以有必要把这种大文件拆分成若干个小文件,然后分别load,下面给出一些测试数据:
[root@yw-0-0 huarong]# wc -l cfi.txt
20894227 cfi.txt,行数20M
有九个字段,varchar(255),没有key.
文件大小4,078,099,848(3.8G),每行平均195字节.
t1.sh 直接load,作用是预热,这个时间数据竟然丢失了...
- innodb t1.sh 再次直接load.
- time mysql test -e "load data local infile '/d01/huarong/cfi.txt' into table cfi"
- [root@yw-0-0 huarong]# ./t1.sh
- real 6m4.720s
- user 0m0.492s
- sys 0m2.213s
- innodb t2.sh不写binlog.
- time mysql test -e "set foreign_key_checks=0; set sql_log_bin=0; set unique_checks=0; load data local infile '/d01/huarong/cfi.txt' into table cfi"
- [root@yw-0-0 huarong]# ./t2.sh
- real 5m3.964s
- user 0m0.586s
- sys 0m2.788s
- innodb t3.sh fifo,每次load 1M行数据。
- wget http://www.maatkit.org/get/mk-fifo-split
- perl ./mk-fifo-split ./cfi.txt --fifo /tmp/cfi.fifo --lines 1000000
- while [ -e /tmp/cfi.fifo ]; do
- time mysql test -e "set foreign_key_checks=0; set sql_log_bin=0; set unique_checks=0; load data local infile '/tmp/cfi.fifo' into table cfi"
- sleep 1;
- done
- real: 5m25.84s
- user: 0m2.197s
- sys: 0m11.244s
- myisam: t2.sh不写binlog
- real 3m24.838s
- user 0m0.626s
- sys 0m2.939s
Tags: mysql导入数据 load data infile
相关文章
- ·mysql中导入数据load data在myisam与innodb区别(2014-09-23)
- ·mysql中常用命令导入导出数据命令(mysqldump,source)(2014-09-23)
- ·MySQL数据导入导出实例教程手册(2014-09-27)
- ·MYSQL数据库的导出和导入方法详解(2014-10-04)
- ·mysql中导入数据与导出数据库sql语句(2014-10-09)
- ·mysql导入数据提示的MySQL server has gone away解决办法(2014-10-09)
- ·mysql导入数据库时出现40101错误解决方法(2014-10-10)
- ·mysql导入数据方法(txt,csv)(2014-10-13)
- ·mysql中导入较大数据简单实现代码(2014-10-13)
- ·MySQL中into outfile将导入数据到文件(2015-04-17)
- ·ubuntu中mysql使用load data导入数据(2014-10-04)
- ·MySQL用load data命令进行数据导入方法(2014-10-04)
- ·mysql load data infile 命令的数据导入(2014-10-10)
- ·mysql load data 设置导入数据编码(2014-10-17)
- ·收缩Mysql的ibdata1文件大小方法(2014-09-29)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)