《mysql插入/更新数据》这篇文章提到,使用LOAD DATA INFILE语句,可以从一个文件直接加载数据到mysql中,但如果文件非常大,可能还需要对文件进行切割,分多次加载,这种情况下,可以使用pt-fifo-split工具将文件分割成多个数据块(chunks),从而控制每次传输到mysql服务器的数据量大小。

pt-fifo-split 可以模拟切割文件,并通过管道传递给先入先出队列而不用真正的切割文件。pt-fifo-split 是percona-toolkit 套件的一部分。

pt-fifo-split 命令用法:

pt-fifo-split [options] [FILE ...]

例如:使用pt-fifo-split分割一个大文件,每次读1000000行:

pt-fifo-split --lines  hugefile.txt
while [ -e /tmp/pt-fifo-split ]; do cat /tmp/pt-fifo-split; done

pt-fifo-split 默认会在/tmp下面建立一个fifo文件,并读取大文件中的数据写入到fifo文件,每次达到指定行数就往fifo文件中打印一个EOF字符,读取完成以后,关闭掉fifo文件并移走,然后重建fifo文件,打印更多的行。这样可以保证你每次读取的时候都能读取到制定的行数直到读取完成。注意此工具只能工作在类unix操作系统。

常用选项:

--fifo /tmp/pt-fifo-split,指定fifo文件的路径;

--offset 0,如果不打算从第一行开始读,可以设置这个参数;

--lines 1000,每次读取的行数;

--force,如果fifo文件已经存在,就先删除它,然后重新创建一个fifo文件;

下面是一个完整的用法例子:

FLAT_FILE="/tmp/big_file.txt"
FIFO_PATH="${FLAT_FILE}.fifo"
LOAD_FILE="${FLAT_FILE}.load"
CHUNK_SIZE= # Split the file
pt-fifo-split --force --lines ${CHUNK_SIZE} ${FLAT_FILE} --fifo ${FIFO_PATH} &
# Sleep seconds to assure ${FIFO_PATH} exists before entering loop
sleep
while [ -e ${FIFO_PATH} ]
do
# Write chunk to disk
cat ${FIFO_PATH} > ${LOAD_FILE}
# Load chunk into table
mysql --database=test \
--show-warnings \
-vve "load data infile '${LOAD_FILE}' into table my_table;"
done

关于pt-fifo-split 性能评测可以参考这篇文章

使用pt-fifo-split 工具往mysql插入海量数据的更多相关文章

  1. mysql 插入/更新数据

    mysql 插入/更新数据 INSERT 语句 1.一次性列出全部字段的值,例如: INSERT INTO student VALUES('Chenqi','M', 29); INSERT INTO ...

  2. mysql 插入中文时出现ERROR 1366 (HY000): Incorrect string value: '\xC0\xEE\xCB\xC4' for column 'usern ame' at row 1

    1 环境: MySQL Server 6.0  命令行工具 2 问题 :  插入中文字符数据出现如下错误: ERROR 1366 (HY000): Incorrect string value: '\ ...

  3. MySQL抓包工具:MySQL Sniffer【转】

    本文来自:https://github.com/Qihoo360/mysql-sniffer 简介 MySQL Sniffer 是一个基于 MySQL 协议的抓包工具,实时抓取 MySQLServer ...

  4. Springboot接口简单实现生成MySQL插入语句

    Springboot接口简单实现调用接口生成MySQL插入语句 在实际测试中,有这样一个需求场景,比如:在性能压力测试中,可能需要我们事先插入数据库中一些相关联的数据. 我们在实际测试中,遇到问题,需 ...

  5. MySQL插入中文时出现ERROR 1406 (22001): Data too long for column 'name' at row 1 (转)

    使用命令行方式登陆到MySQL服务器, 建立一个数据库,数据库编码设为UTF-8.此时,如果直接在命令行窗口使用insert语句插入中文,就遇到类似 ERROR 1406 (22001): Data ...

  6. Python3 多线程(连接池)操作MySQL插入数据

    1.主要模块DBUtils : 允许在多线程应用和数据库之间连接的模块套件Threading : 提供多线程功能 2.创建连接池PooledDB 基本参数: mincached : 最少的空闲连接数, ...

  7. mysql 插入数据失败防止自增长主键增长的方法

    mysql设置了自增长主键ID,插入失败的那个自增长ID也加一的,比如失败5个,下一个成功的不是在原来最后成功数据加1,而是直接变成加6了,失败次数一次就自动增长1了,能不能让失败的不增长的? 或者说 ...

  8. 常用备份工具是mysql自带的mysqldump

    常用备份工具是mysql自带的mysqldump,mysqldump -u root -p密码 dbname >d:\test.sql ------------备份某个库mysqldump -u ...

  9. mysql插入日期 vs oracle插入日期

    今天做oracle日期插入的时候突然开始疑惑日期是如何插入的. 用框架久了,反而不自己做简单的工作了.比如插入. 通常,新建一个表对象,然后绑定数据,前端form提交,后端getModel后直接mod ...

随机推荐

  1. 【POJ 2503】Babelfish(字符串)

    题 给定字典,再询问. 字典与询问之间有一个空行. cin.peek()是一个指针指向当前字符. #include<iostream> #include<string> #in ...

  2. HA模式手动切换namenode状态

    查看状态 hdfs haadmin -getServiceState nn1 有时候通过网页访问两个namenode的http-address,看到默认的主namenode状态变成了standy,这时 ...

  3. 【spoj8222】Substrings

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  4. FIneCMS /dayrui/libraries/Chart/ofc_upload_image.php Arbitrary File Upload Vul

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 Relevant Link: http://www.wooyun.org ...

  5. QTVA-2015-198545、WooYun-2015-104148 .NET Framework Arbitrary File Permissions Modify Vul

    catalog . Description . Effected Scope . Exploit Analysis . Principle Of Vulnerability . Patch Fix 1 ...

  6. dedecms /include/uploadsafe.inc.php SQL Injection Via Local Variable Overriding Vul

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 . dedecms原生提供一个"本地变量注册"的模拟 ...

  7. 关于 htonl 和 ntohl 的实现

    因为需要直接处理一个网络字节序的 32 位 int,所以,考虑用自己写的还是系统函数效率更高.然后又了下面的了解. 首先是系统函数 htonl ,我在 kernel 源码 netinet/in.h 找 ...

  8. ADC/DAC的一些参数

    1.LSB,Least Significant Bit LSB是指最低位一个bit的权值,比喻ADC是一把尺子,那LSB则是它的最小刻度.LSB=Vfs/(2^N),Vfs为full scale vo ...

  9. protected的使用注意

    在c#的可访问性级别中,public和private算是最容易理解的,相反protected往往令人非常头疼.经常在网上查资料的朋友往往会发现,答案几乎都是前篇一律,不是从msdn上拷贝的就是从别人的 ...

  10. Linux rsync网站目录同步功能的实现

    实现目标: 172.16.1.64服务器上的/var/www/sw_service目录,与172.16.1.60服务器上的/var/www/sw_service目录实现同步, 即1.60主动向1.64 ...