数据导入导出工具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. php 图片上传 并返回上传文件位置 支持多文件上传

    <?php /** * Created by PhpStorm. * User: DY040 * Date: 2018/4/26 * Time: 13:23 */ echo '<pre&g ...

  2. 利用JS获取本地时间和服务器时间

    <p id="labTime"> <script type="text/javascript"> //取客户端时间 setInterva ...

  3. 转 OGG 部署阶段常见问题

    序号 问题 解决方案1 "2019-04-13 20:23:55 ERROR OGG-00868 Oracle GoldenGate Capture for Oracle, e_db1.pr ...

  4. CSAPP阅读笔记-变长栈帧,缓冲区溢出攻击-来自第三章3.10的笔记-P192-P204

    一.几个关于指针的小知识点: 1.  malloc是在堆上动态分配内存,返回的是void *,使用时会配合显式/隐式类型转换,用完后需要用free手动释放. alloca是标准库函数,可以在栈上分配任 ...

  5. Objective-C中.h、.m、.mm的区别

    .h :头文件.头文件包含类,类型,函数和常数的声明.  .m :源代码文件.这是典型的源代码文件扩展名,可以包含Objective-C和C代码.  .mm :源代码文件.带有这种扩展名的源代码文件, ...

  6. mysql 5.6 windows7 解压缩版安装的坑

    从官网下载了解压缩版的mysql ,解压缩后,配置好环境变量,运行安装命令,提示我 缺失ddl文件,然后百度,找到了一个windows 系统组件扫描安装缺失组件的程序,然后继续安装,遇到了 初始化密码 ...

  7. Redis云端架构深入浅出

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯云数据库 TencentDB 发表于云+社区专栏 作者介绍:邹鹏,腾讯云数据库Redis产品负责人,多年数据库.网络安全研发经验. ...

  8. ASP.NET Core项目中新增和删除的内容

    最新一版的.NET几经改名,最终得到了.NET Core这个高大上的名称,相应的ASP.NET MVC也跟着提供了ASP.NET Core MVC版本. 在.NET Core没有稳定名称时,叫做MVC ...

  9. Hbuilder编辑App时,ajax跨域访问失败问题

    今天试着用Hbuilder写app的前段显示页面,在第一步时就被打住了,ajax异步调用服务器的登录接口时,报错, 显示这样的错误 XMLHttpRequest cannot loadhttp://w ...

  10. linux 修改用户主目录(转载)

    第一:修改/etc/passwd文件 第二:usermod命令 详细说明如下: 第一种方法: vi /etc/passwd 找到要修改的用户那几行,修改掉即可.此法很暴力,建议慎用. 第二种:user ...