数据导入导出工具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. Java 覆写初探

    Java 覆写 继承性的主要特征是子类可以根据父类已有的功能进行功能扩展,但是在子类定义属性或方法的时候有可能定义属性和方法和父类同名,在此类情况下就称为:“覆写”. 方法的覆写:[改良原本功能不足的 ...

  2. C语言中结构体定义

    struct test { int a; }; /* 定义一个结构体,名字是test,这样就可以使用struct test 来定义变量.比如 struct test a; */ typedef str ...

  3. 【爬虫】-xpath语法熟悉及实战

    本文为自学记录,部分内容转载于 w3school python3网络爬虫实战 知乎专栏:写点python 如有侵权,请联系删除. 语法 1.选取节点 XPath 使用路径表达式在 XML 文档中选取节 ...

  4. MySQL初始化与用户配置

    数据库初始化 默认情况下,数据已经初始化好,数据可参见默认配置文件/etc/my.cnf 在其他位置重新初始化MySQL数据库: basedir是mysql的安装根目录,ldata是数据初始化的目录 ...

  5. (转)合格linux运维人员必会的30道shell编程面试题及讲解

    超深度讲解shell高级编程实战,截至目前shell编程课程国内培训机构最细的课程,不信请看学员表现的水平. 课程牛不牛,不是看老师.课表,而是看培养的的学生水平,目前全免费中伙伴们赶紧看啊. htt ...

  6. Oracle dbms_random随机函数包

    dbms_random是oracle提供的一个随机函数包,以下是它的一些常用的功能: 1.dbms_random.value 作用:生成一个大于等于0,大于等于1的随机的38位小数,代码如下: sel ...

  7. MySQL查询操作select

    查找记录 SELECT select_expr [,select_expr ...] [ FROM table_references(表的参照) [WHERE where_condition](条件) ...

  8. 聊聊Python ctypes 模块(转载)

    https://zhuanlan.zhihu.com/p/20152309?columnSlug=python-dev 作者:Jerry Jho链接:https://zhuanlan.zhihu.co ...

  9. jQuery插件的开发(一)

    jQuery插件的开发包括两种: 一种是类级别的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法.jQuery的全局函数就是属于jQuery命名空间的函数,另一种是对象级 ...

  10. C 标准库 - string.h之strcpy使用

    strcpy Copies the C string pointed by source into the array pointed by destination, including the te ...