数据导入导出工具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. 如何在vue中请求本地json文件

    1..修改webpack.base.conf.js 文件中添加'/static': resolve('static'),如下所示,此时存放于static的json文件就可以通过/static/xxx. ...

  2. Java框架-mybatis03使用注解实现mybatis

    1.面向接口编程: 好处:扩展性好,分层开发中,上层不用管具体的实现,都遵循共同的标准,使得开发变得容易.规范性更好 2.注解的实现 a)编写Dao接口 public interface UserDa ...

  3. (转)MyISAM Key Cache详解及优化

    原文:http://huanghualiang.blog.51cto.com/6782683/1372721 一.MyISAM Key Cache详解: 为了最小化磁盘I/O,MyISAM将最频繁访问 ...

  4. 【Lua】Lua + LWT + ExtJS构建目录树

    Lua处理后台逻辑,Lua lwt搭建后台程序,ExtJS根据后台传来的json数据构建目录树. 前台html和ExtJS代码不用多讲,直接上代码: treePanel.html <html&g ...

  5. 关于new Option()

    先来了解下,如何运用js实现select动态添加option. //1.动态创建select function createSelect(){ var mySelect = document.crea ...

  6. Golang教程:类型

    下面是 Go 支持的基本类型: bool Numeric Types  int8, int16, int32, int64, int uint8,uint16,uin32,uint64, uint f ...

  7. bzoj 2164: 采矿

    Description 浩浩荡荡的cg大军发现了一座矿产资源极其丰富的城市,他们打算在这座城市实施新的采矿战略.这个城市可以看成一棵有n个节点的有根树,我们把每个节点用1到n的整数编号.为了方便起见, ...

  8. Oracle OCI操作UDT相关学习(二)

    沿用 Oracle OCI操作UDT相关学习 一文中定义的类型和表. 1.更改数据 在sqldeveloper 中更新数据, update dxl.cust set addr.street='a11' ...

  9. poj Corn Fields 状态压缩dp。

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 5763   Accepted: 3052 Descr ...

  10. winform多线程调用控件

    对多线程操作控件的理解: 控件不能被非创造他的线程修改.需调用控件.beginvoke,注入UI线程.控件.beginvoke会把操作加入UI线程,阻塞画面响应.不要把耗时的计算放在控件.beginv ...