数据导入导出工具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. Unity QualitySettings.shadows 阴影

    QualitySettings.shadows 阴影 public static ShadowQuality shadows; Description 描述: 要使用的实时阴影类型. 这就决定了应该使 ...

  2. Ubuntu 18.04上搭建FTP服务器

    1.准备工作需要安装并运行的Ubuntu Server 18.04系统.当然还需要一个具有sudo权限的账号. 2.安装VSFTPVSFTP程序位于标准存储库中,因此可以使用单个命令删除安装.打开终端 ...

  3. [转]C#算法题

    1:不允许使用循环语句.条件语句,在控制台中打印出1-200这200个数. 参考答案:这里我使用的是递归. static void Main(string[] args) { Print(); Con ...

  4. 使用express、react、webpack打包、socket.io、mongodb、ant.design、less、es6实现聊天室

    拿到一个项目,我们应该如何去完成这个项目呢. 是直接上手? 还是先进行分析,然后再去解决呢?毫无疑问,如果直接上手解决,那么可能会因为知道目标所在,而导致出现各种问题. 所以,我们应该系统的分析这个项 ...

  5. md5码加密(Python)

    import hashlib import hmac m = input('输入要加密内容:') md = hashlib.md5()#生成md5 hash对象 md.update(m.encode( ...

  6. 关于游标嵌套时@@FETCH_STATUS的值

    游标嵌套使用时,@@FETCH_STATUS的值有时会从内部游标影响到外部的游标,使外部的游标只循环一次.这时要检查游标的使用方法.要先移动游标,然后就开始判断,为真进行进行业务逻辑处理,然后移动游标 ...

  7. 腾讯云AI平台张文杰:构建一站式机器学习服务平台

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 5月24日,以"无界数据无限智能"为主题的腾讯"云+未来"峰会AI大数据分论坛在广州拉开帷幕.此次分 ...

  8. Hibernate中的CRUD操作

    1.添加数据操作 插入数据使用session对象的save()方法完成.   插入代码: @Test public void Test1(){ SessionFactory sessionFactor ...

  9. vue打包后运行在本地/非服务器端环境的访问路径

    vue打包前的配置: 项目目录下--> config文件夹---> index.js: build:  { assetsPublickPath:  './',   // 设置成相对路径   ...

  10. Java中final修饰参数的作用

    在方法参数前面加final关键字就是为了防止数据在方法体中被修改. 主要分两种情况:第一,用final修饰基本数据类型:第二,用final修饰引用类型. 第一种情况,修饰基本类型(非引用类型).这时参 ...