pt-archiver归档工具的使用详解

简介:

之前的percona-toolkit工具集的使用博文里面也写到pt-archiver这个工具的用法,但是不够深入全面。这里补充完善下。


注意:pt-archiver操作的表必须有主键。

 

查看帮助: perldoc  pt-archiver

 

Specify at least one of "--dest","--file", or "--purge".

下面几个参数都是互斥的,只能选其一

    "--ignore"and "--replace" are mutually exclusive. 

    "--txn-size"and "--commit-each" are mutually exclusive.

    "--low-priority-insert"and "--delayed-insert" are mutually exclusive.

    "--share-lock"and "--for-update" are mutually exclusive.

    "--analyze"and "--optimize" are mutually exclusive.

    "--no-ascend"and "--no-delete" are mutually exclusive.

 

常用的参数:

    --limit10000       每次取1000行数据用pt-archive处理,Number of rows to fetch and archive per statement.

    --txn-size  1000   设置1000行为一个事务提交一次,Number of rows pertransaction.

    --where'id<3000'   设置操作条件

    --progress5000     每处理5000行输出一次处理信息

    --statistics       输出执行过程及最后的操作统计。(只要不加上--quiet,默认情况下pt-archive都会输出执行过程的)

    --charset=UTF8     指定字符集为UTF8

    --bulk-delete      批量删除source上的旧数据(例如每次1000行的批量删除操作)

    --bulk-insert      批量插入数据到dest主机 (destgeneral log发现它是通过在dest主机上LOAD DATA LOCAL INFILE插入数据的)

    --replace          insert into 语句改成replace写入到dest

    --sleep120         每次归档了limit个行记录后的休眠120秒(单位为秒)

    --file'/root/test.txt'

    --purge             删除source数据库的相关匹配记录

    --header            输入列名称到首行(和--file一起使用)

    --no-check-charset  不指定字符集

    --check-columns    检验destsource的表结构是否一致,不一致自动拒绝执行(不加这个参数也行。默认就是执行检查的)

    --no-check-columns    不检验destsource的表结构是否一致,不一致也执行(会导致dest上的无法与source匹配的列值被置为null或者0

    --chekc-interval      默认1s检查一次

    --local            不把optimizeanalyze操作写入到binlog里面(防止造成主从延迟巨大)

    --retries         超时或者出现死锁的话,pt-archiver进行重试的间隔(默认1s

    --no-version-check   目前为止,发现部分pt工具对阿里云RDS操作必须加这个参数

    --analyze=ds      操作结束后,优化表空间(d表示dests表示source

    默认情况下,pt-archiver操作结束后,不会对sourcedest表执行analyzeoptimize操作,因为这种操作费时间,并且需要你提前预估有足够的磁盘空间用于拷贝表。一般建议也是pt-archiver操作结束后,在业务低谷手动执行analyze table用以回收表空间。

 

 

pt-archiverBug不会迁移max(id)那条数据的解决方法:

    参考:http://www.ttlsa.com/mysql/pt-archiver-bug-cannot-migration-max-id-record/

   vim/usr/bin/pt-archiver +6285  ,如下:

    修改前: $first_sql .= " AND ($col < " . $q->quote_val($val) . ")";

    修改后: $first_sql .= " AND ($col <= " . $q->quote_val($val) .")";

 

 

删除老数据(单独的删数据操作不用指定字符集)

/usr/bin/pt-archiver \

--source h=localhost,u=root,p=1234,P=3306,D=test,t=t \

--no-check-charset --where 'a<=376' --limit 10000 --txn-size 1000 --purge

 

复制数据到其他mysql实例,且不删除source的数据(指定字符集)

/usr/bin/pt-archiver \

--source h=localhost,u=root,p=1234,P=3306,D=test,t=t1\

--dest h=192.168.2.12,P=3306,u=archiver,p=archiver,D=test,t=t1_bak \

--progress 5000 --where 'mc_id<=125' \

--statistics --charset=UTF8 --limit=10000 --txn-size 1000 --no-delete

 

复制数据到其他mysql实例,并删source上的旧数据(指定字符集)

/usr/bin/pt-archiver \

--source h=localhost,u=root,p=1234,P=3306,D=test,t=t1 \

--dest h=192.168.2.12,P=3306,u=archiver,p=archiver,D=test,t=t1_his \

--progress 5000 --where "CreateDate <'2017-05-01 00:00:00' " \

--statistics --charset=UTF8 --limit=10000 --txn-size 1000 --bulk-delete

### 官方文档说明:The normal method isto delete every row by its primary key. Bulk deletes might be a lot faster.They also

mightnot be faster if you have a complex WHERE clause.

 

复制数据到其他mysql实例,不删除source数据,但是使用批量插入dest上新的数据(指定字符集)

/usr/bin/pt-archiver \

--source h=localhost,u=archiver,p=archiver,P=3306,D=test,t=t1 \

--dest h=192.168.2.12,P=3306,u=archiver,p=archiver,D=test,t=t1_his \

--progress 5000 --where "c <'2017-05-01 00:00:00' " \

--statistics --charset=UTF8 --limit=10000 --txn-size 1000 --no-delete  --bulk-insert

### 测试用的一张只有3列元素的表,共计9万行数据。使用bulk-insert用时7秒钟。而常规insert用时40秒。

 

导出数据到文件:

/usr/bin/pt-archiver \

--source h=10.0.20.26,u=root,p=1234,P=3306,D=test,t=t \

--file '/root/test.txt' \

--progress 5000 --where 'a<12000' \

--no-delete --statistics --charset=UTF8 --limit=10000 --txn-size 1000


导出数据到文件并删除数据库的相关行:

/usr/bin/pt-archiver \

--source h=10.0.20.26,u=root,p=1234,P=3306,D=test,t=t \

--file '/root/test.txt' \

--progress 5000 --where 'a<12000' \

--statistics --charset=UTF8 --limit=10000 --txn-size 1000 --purge











本文转自 lirulei90 51CTO博客,原文链接:http://blog.51cto.com/lee90/1947357,如需转载请自行联系原作者
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
消息中间件 运维 Serverless
商业版vs开源版:一图看懂云消息队列 RocketMQ 版核心优势
自建开源 RocketMQ 集群,为保证业务稳定性,往往需要按照业务请求的峰值去配置集群资源。云消息队列 RocketMQ 版 Serverless 实例通过资源快速伸缩,实现资源使用量与实际业务负载贴近,并按实际使用量计费,有效降低企业的运维压力和使用成本。
1065 127
|
11月前
|
存储 人工智能 数据处理
对话王峰:Apache Flink 在 AI 时代的“剑锋”所向
Flink 2.0 架构升级实现存算分离,迈向彻底云原生化,支持更大规模状态管理、提升资源效率、增强容灾能力。通过流批一体与 AI 场景融合,推动实时计算向智能化演进。生态项目如 Paimon、Fluss 和 Flink CDC 构建湖流一体架构,实现分钟级时效性与低成本平衡。未来,Flink 将深化 AI Agents 框架,引领事件驱动的智能数据处理新方向。
1075 6
|
11月前
|
存储 分布式计算 数据处理
「48小时极速反馈」阿里云实时计算Flink广招天下英雄
阿里云实时计算Flink团队,全球领先的流计算引擎缔造者,支撑双11万亿级数据处理,推动Apache Flink技术发展。现招募Flink执行引擎、存储引擎、数据通道、平台管控及产品经理人才,地点覆盖北京、杭州、上海。技术深度参与开源核心,打造企业级实时计算解决方案,助力全球企业实现毫秒洞察。
919 0
「48小时极速反馈」阿里云实时计算Flink广招天下英雄
|
SQL Java 数据库连接
自定义HikariCP连接池
自定义HikariCP连接池
2489 0
|
Docker Python 容器
Docker——阿里云服务器使用Docker部署python项目全程小记
本文记录了我在阿里云服务器上使用Docker部署python项目(flask为例)的全过程,在这里记录和分享一下,希望可以给大家提供一些参考。
1983 1
|
NoSQL Cloud Native Redis
Redis核心开发者的新征程:阿里云与Valkey社区的技术融合与创新
阿里云瑶池数据库团队后续将持续参与Valkey社区,如过往在Redis社区一样耕耘,为开源社区作出持续贡献。
Redis核心开发者的新征程:阿里云与Valkey社区的技术融合与创新
|
存储 消息中间件 缓存
独特架构打造新一代消息队列Apache Pulsar
Apache Pulsar 是一个开源的分布式消息流平台,由雅虎开发并于 2016 年开源,2018 年成为 Apache 顶级项目。Pulsar 通过独特的架构提供多租户、持久化存储和批处理等高级功能,支持高吞吐量、低延迟的消息传递。其核心组件包括 Broker、Apache BookKeeper 和 Apache ZooKeeper,分别负责消息处理、持久化存储和集群管理。
756 1
|
网络安全
|
Java Linux Shell
linux卸载jdk
linux卸载jdk
421 0
|
Docker 容器
Docker镜像的使用
Docker镜像的使用
499 0