数据导入导出工具pt-archiver
工具可以将MySQL的表数据导出到一个新表或者一个文件,也有自己的应用场景,比如数据归档,删除数据,数据合并等。
具体用法:
pt-archiver [OPTIONS] --source DSN --where WHERE
PT工具链接参数DSN一般适用于所有toolkit工具。
DSN的详细参数:
a:查询
A:字符集
b:true代表禁用binlog
D:数据库
u:数据库链接账号
p:数据库链接密码
h:主机IP
F:配置文件位置
i:是否使用某索引
m:插件模块
P:端口号
S:socket文件
t:表
具体使用,从一张表导入到另外一张表,要注意的是新表必须是已经建立好的一样的表结构,不会自动创建表,而且where条件是必须指定的:
[root@mxqmongodb2 bin]# ./pt-archiver --source h=172.16.16.35,P=,D=tpcc,t=new_orders,u=root,p= --dest h=172.16.16.35,P=,D=test,t=new_orders,u=root,p= --no-check-charset --where 'no_o_id>3800' --progress  --no-delete --limit= --statistics
TIME ELAPSED COUNT
--21T11::
--21T11::
--21T11::
--21T11::
--21T11::
--21T11::
--21T11::
--21T11::
--21T11::
--21T11::
--21T11::
Started at --21T11::, ended at --21T11::
Source: D=tpcc,P=,h=172.16.16.35,p=...,t=new_orders,u=root
Dest: D=test,P=,h=172.16.16.35,p=...,t=new_orders,u=root
SELECT
INSERT
DELETE
Action Count Time Pct
commit 568.6790 98.71
inserting 4.9776 0.86
select 0.0689 0.01
other 2.4091 0.42
我们打开general_log,发现这个操作是一条一条执行的,每一条数据都是一个事物。例如下面:
--21T03::.328427Z  Query INSERT INTO `test`.`new_orders`(`no_o_id`,`no_d_id`,`no_w_id`) VALUES ('','','')
--21T03::.328819Z Query commit
--21T03::.362113Z Query commit
--21T03::.362565Z Query INSERT INTO `test`.`new_orders`(`no_o_id`,`no_d_id`,`no_w_id`) VALUES ('','','')
--21T03::.362977Z Query commit
而且整个处理过程不会对原表进行锁定,对于作为导出工具来说很优秀了。
具体使用,将表中数据导出到文件:
可以看下导出到文件:
[root@mxqmongodb2 bin]# ./pt-archiver --source h=172.16.16.35,P=,D=tpcc,t=new_orders,u=root,p= --no-check-charset --where 'no_o_id>3800' --progress  --no-delete --file "/home/sa/pt-archiver.dat" --limit=
TIME ELAPSED COUNT
--21T13::
--21T13::
--21T13::
--21T13::
--21T13::
--21T13::
--21T13::
--21T13::
--21T13::
--21T13::
--21T13::
我们要注意的是--no-delete这个参数,默认情况下是不指定这个参数会直接将数据删除,我们最好还是指定一下。
看一下日志,他是通过主键取数据,每次取1000条,而且分割成不同的批次来取:
--21T05::.332458Z  Query SELECT /*!40001 SQL_NO_CACHE */ `no_o_id`,`no_d_id`,`no_w_id` FROM `tpcc`.`new_orders` FORCE INDEX(`PRIMARY`) WHERE (no_o_id>) AND ((`no_w_id` > '') OR (`no_w_id` = '' AND `no_d_id` > '') OR (`no_w_id` = '' AND `no_d_id` = '' AND `no_o_id` > '')) ORDER BY `no_w_id`,`no_d_id`,`no_o_id` LIMIT
--21T05::.332963Z Query commit
--21T05::.333220Z Quit
再看一下导出的文件,发现是固定格式的文件:
[root@mxqmongodb2 sa]# head - pt-archiver.dat
最后看一下删除数据:
mysql> select count(*) from test.new_orders where no_o_id>;
+----------+
| count(*) |
+----------+
| |
+----------+
row in set (0.00 sec)
删除:
[root@mxqmongodb2 bin]# ./pt-archiver --source h=172.16.16.35,P=,D=test,t=new_orders,u=root,p= --no-check-charset --where 'no_o_id>3900' --purge --limit=
mysql> select count(*) from test.new_orders where no_o_id>;
+----------+
| count(*) |
+----------+
| |
+----------+
row in set (0.00 sec)
然后看一下日志文件:
--21T05::.655361Z  Query SELECT /*!40001 SQL_NO_CACHE */ `no_o_id`,`no_d_id`,`no_w_id` FROM `test`.`new_orders` FORCE INDEX(`PRIMARY`) WHERE (no_o_id>) AND ((`no_w_id` > '') OR (`no_w_id` = '' AND `no_d_id` > '') OR (`no_w_id` = '' AND `no_d_id` = '' AND `no_o_id` >= '')) ORDER BY `no_w_id`,`no_d_id`,`no_o_id` LIMIT
--21T05::.656582Z Query DELETE FROM `test`.`new_orders` WHERE (`no_w_id` = '' AND `no_d_id` = '' AND `no_o_id` = '')
--21T05::.657058Z Query commit
--21T05::.710106Z Query DELETE FROM `test`.`new_orders` WHERE (`no_w_id` = '' AND `no_d_id` = '' AND `no_o_id` = '')
--21T05::.710659Z Query commit
--21T05::.756656Z Query DELETE FROM `test`.`new_orders` WHERE (`no_w_id` = '' AND `no_d_id` = '' AND `no_o_id` = '')
--21T05::.757106Z Query commit
--21T05::.814019Z Query DELETE FROM `test`.`new_orders` WHERE (`no_w_id` = '' AND `no_d_id` = '' AND `no_o_id` = '')
--21T05::.814538Z Query commit
--21T05::.869874Z Query DELETE FROM `test`.`new_orders` WHERE (`no_w_id` = '' AND `no_d_id` = '' AND `no_o_id` = '')
--21T05::.870439Z Query commit
--21T05::.926640Z Query SELECT 'pt-archiver keepalive'
--21T05::.927001Z Query DELETE FROM `test`.`new_orders` WHERE (`no_w_id` = '' AND `no_d_id` = '' AND `no_o_id` = '')
是先分批量查出来,然后逐条进行删除。

pt-archiver(数据导入导出工具)的更多相关文章

  1. HData——ETL 数据导入/导出工具

    HData是一个异构的ETL数据导入/导出工具,致力于使用一个工具解决不同数据源(JDBC.Hive.HDFS.HBase.MongoDB.FTP.Http.CSV.Excel.Kafka等)之间数据 ...

  2. MySQL多线程数据导入导出工具Mydumper

    http://afei2.sinaapp.com/?p=456 今天在线上使用mysqldump将数据表从一个库导入到另外一个库,结果速度特别慢,印象中有个多线程的数据导入导出工具Mydumper,于 ...

  3. Oracle exp/imp数据导入导出工具基本用法

    一.获取帮助 exp/imp help=y 二.数据导出 1.将数据库完全导出,设置full选项exp system/manager@orcl file=d:\db.dmp full=y 2.导出数据 ...

  4. HBase数据导入导出工具

    hbase中自带一些数据导入.导出工具 1. ImportTsv直接导入 1.1 hbase中建表 create 'testtable4','cf1','cf2' 1.2 准备数据文件data.txt ...

  5. PLSQL_数据泵Datapump导入导出数据IMPDP / EXPDP(概念)(Oracle数据导入导出工具)(转)

    一.摘要 在平常备库和数据库迁移的时候,当遇到大的数据库的时候在用exp的时候往往是需要好几个小时,耗费大量时间.oracle10g以后可以用expdp来导出数据库花费的时间要远小于exp花费的时间, ...

  6. Sqoop -- 用于Hadoop与关系数据库间数据导入导出工作的工具

    Sqoop是一款开源的工具,主要用于在Hadoop相关存储(HDFS.Hive.HBase)与传统关系数据库(MySql.Oracle等)间进行数据传递工作.Sqoop最早是作为Hadoop的一个第三 ...

  7. sqlserver自带的导入导出工具,分别导入大批量mysql和oracle数据时的感受

    sqlserver自带的导入导出工具,分别导入大批量mysql和oracle数据时,mysql经常出现格式转换出错,不好导入  导入的数据量比较大时,还不如自己写个工具导入 今天在导oracle时,想 ...

  8. MySQL数据导入导出方法与工具mysqlimport

    MySQL数据导入导出方法与工具mysqlimport<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office ...

  9. ITTC数据挖掘平台介绍(五) 数据导入导出向导和报告生成

    一. 前言 经过了一个多月的努力,软件系统又添加了不少新功能.这些功能包括非常实用的数据导入导出,对触摸进行优化的画布和画笔工具,以及对一些智能分析的报告生成模块等.进一步加强了平台系统级的功能. 马 ...

随机推荐

  1. Celery 分布式任务队列快速入门 以及在Django中动态添加定时任务

    Celery 分布式任务队列快速入门 以及在Django中动态添加定时任务 转自 金角大王 http://www.cnblogs.com/alex3714/articles/6351797.html ...

  2. python fileinput处理多文件

    import fileinput with fileinput.input(files=(path1,path2)) as f: for line in f: print(line)

  3. Unity5 2D Animation

    1. 所有的动画保存在 .anim 后缀的文件里.2. Animation 标签用来编辑一堆 Animation clip,每一个clip是一个图片序列,也就是动图.动画的最小控制单位就是clip,一 ...

  4. 加载 Firefox 配置

    有小伙伴在用脚本启动浏览器时候发现原来下载的插件不见了,无法用 firebug在打开的页面上继续定位页面元素,调试起来不方便 .加载浏览器配置,需要用 FirefoxProfile(profile_d ...

  5. android 拍照和从相册选择组件

    android 拍照及从相册选择组件 单独封装到一个 activity 中便于更好的复用 拍照或从相册选择成功后使用 EventBus 发出广播回传图片路径,和调用者充分解耦合 根据传入参数支持裁剪和 ...

  6. 【Lua】linux下lua+mod_lwt环境搭建

    Lua 是一个小巧的脚本语言.它具有轻量级.可扩展等优势.它可以作为一个强大.轻量的脚本语言,供任何需要的程序使用. LWT (Lua Web Tools) 可让你使用 Lua 开发 Web 应用,并 ...

  7. unity2018的坑点

    发布后有的电脑无法运行exe程序(反正我的电脑不行) 删除发布出来的一个叫UnityCrashHandler64.exe即可运行

  8. html的列表

    1.无序列表(最常用) 先看个例子:如下图: 使用的 html标签为  <ul>   <!--ul是UnorderList的缩写,意为无序列表:li是ListItem的缩写,列表项- ...

  9. Android OpenGL教程-第四课【转】

    第四课 旋转: 在这一课里,我将教会你如何旋转三角形和四边形.左图中的三角形沿Y轴旋转,四边形沿着X轴旋转. 我们增加两个变量来控制这两个对象的旋转.这两个变量加在程序的开始处其他变量的后面.它们是浮 ...

  10. JavaEE 7 最全教程集锦(转)

    转自 http://www.iteye.com/news/28009 甲骨文公司已经在6月份正式发布了JavaEE 7,该版本带来了诸多新的规范及特性,将企业级开发提升到了一个新的层次. Java E ...