一、描述

pt-archiver 是归档表的工具,在 sql 中写入高效归档和清除作业。 目标是在不对 OLTP 查询产生太大影响的情况下,将旧数据从表中蚕食掉,从而实现低影响、仅向前的作业。 您可以将数据插入到另一个表中,而不必在同一台服务器上。 您也可以将其写入适合 LOAD DATA INFILE 格式的文件。 或者你两者都不能做,在这种情况下它只是一个增量删除。

二、实践

针对不同参数做了一些实验,来帮助了解参数

1.官方示例

# 标准用法
pt-archiver [OPTIONS] --source DSN --where WHERE# 将表从oltp实例归档到olap的实例中
pt-archiver --source h=oltp_server,D=test,t=tbl --dest h=olap_server --file '/var/log/archive/%Y-%m-%d-%D.%t' --where "1=1" --limit 1000 --commit-each# 从子表删除孤立行
pt-archiver --source h=host,D=db,t=child --purge --where 'NOT EXISTS(SELECT * FROM parent WHERE col=child.col)'

2.具体测试

2.1 归档到同一实例上的不同表

./pt-archiver --source h=127.0.0.1,P=3307,u=rpl_test,D=mts_rpl_test2,t=mts_test3 --charset=utf8mb4  --ask-pass --dest h=127.0.0.1,P=3307,u=rpl_test,D=mts_rpl_test2,t=mts_test3_arch --ask-pass --where "id<135887" --limit 100 --commit-each
# 因为--dest会从--source继承相同的指,所以上面的命令也可以用下面的写法来写,注意,表必须是已经存在的表
./pt-archiver --source h=127.0.0.1,P=3307,u=rpl_test,D=mts_rpl_test2,t=mts_test3 --charset=utf8mb4  --ask-pass --dest t=mts_test3_arch  --where "id<135887" --limit 100 --commit-each
# 利用配置文件来进行登录
./pt-archiver --source F=/etc/my2.cnf,u=root,D=mts_rpl_test2,t=mts_test3 --charset=utf8mb4  --ask-pass --dest t=mts_test3_arch  --where "id<135887" --limit 100 --commit-each
# 利用socket文件来进行登录,如果使用单机多实例部署的时候采用这种方法要尤其注意dest的真实实例./pt-archiver --source u=root,D=mts_rpl_test2,t=mts_test3 -S /data/mysql_data2/mysql.sock  --charset=utf8mb4  --ask-pass --dest t=mts_test3_arch  --where "id<135887" --limit 100 --commit-each

2.2 归档到文件

# 输出到文件,因为文件没有utf8mb4这种编码,所以这里直接设置了no-check-charset
./pt-archiver --source b,h=127.0.0.1,P=3307,u=rpl_test,D=mts_rpl_test2,t=mts_test3   --ask-pass  --file '/data/it_tool/archiver/%Y-%m-%d-%D.txt' --no-check-charset  --where "id<135887" --limit 100 --commit-each

2.3 只删除不归档

# 只删除,不归档
./pt-archiver --source h=127.0.0.1,P=3307,u=rpl_test,D=mts_rpl_test2,t=mts_test3 --charset=utf8mb4  --ask-pass  --purge  --where "id<136887" --limit 100 --commit-each

2.4 不写入binlog中

# b=true指定归档操作不写入binlog中,因为b的copy是false,所以source和dest都需要指定,可以在通用日志中看到有如下操作SET SQL_LOG_BIN=0
./pt-archiver --source b=true,h=127.0.0.1,P=3307,u=rpl_test,D=mts_rpl_test2,t=mts_test3 --charset=utf8mb4  --ask-pass --dest b=true,t=mts_test3_arch  --where "id<137998" --limit 100 --commit-each

2.5 通过通用日志看执行原理

# 基本环境检测和设置,包括设置字符集,sql_mode,关闭自动提交,查询最大id等,
2023-04-12T09:23:40.510296Z    28 Query show variables like '%general%'
2023-04-12T09:24:12.562739Z    40 Connect   rpl_test@127.0.0.1 on mts_rpl_test2 using TCP/IP
2023-04-12T09:24:12.562940Z    40 Query set autocommit=0
2023-04-12T09:24:12.563548Z    40 Query /*!40101 SET NAMES "utf8mb4"*/
2023-04-12T09:24:12.563695Z    40 Query SHOW VARIABLES LIKE 'wait\_timeout'
2023-04-12T09:24:12.565120Z    40 Query SET SESSION wait_timeout=10000
2023-04-12T09:24:12.565245Z    40 Query SELECT @@SQL_MODE
2023-04-12T09:24:12.565337Z    40 Query SET @@SQL_QUOTE_SHOW_CREATE = 1/*!40101, @@SQL_MODE='NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'*/
2023-04-12T09:24:12.565430Z    40 Query SELECT VERSION()
2023-04-12T09:24:12.565564Z    40 Query SHOW VARIABLES LIKE 'character_set_server'
2023-04-12T09:24:12.566813Z    40 Query SELECT version()
2023-04-12T09:24:12.567026Z    40 Query SHOW VARIABLES LIKE 'version%'
2023-04-12T09:24:12.568246Z    40 Query SHOW ENGINES
2023-04-12T09:24:12.568528Z    40 Query SHOW VARIABLES LIKE 'innodb_version'
2023-04-12T09:24:12.569788Z    40 Query show variables like 'innodb_rollback_on_timeout'
2023-04-12T09:24:12.570783Z    40 Query /*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, @@SQL_MODE := '', @OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, @@SQL_QUOTE_SHOW_CREATE := 1 */
2023-04-12T09:24:12.570906Z    40 Query USE `mts_rpl_test2`
2023-04-12T09:24:12.571014Z    40 Query SHOW CREATE TABLE `mts_rpl_test2`.`mts_test3`
2023-04-12T09:24:12.571152Z    40 Query /*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, @@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */
2023-04-12T09:24:12.571430Z    40 Query SELECT CONCAT(/*!40100 @@session.character_set_connection, */ "")
2023-04-12T09:24:16.494268Z    41 Connect   rpl_test@127.0.0.1 on mts_rpl_test2 using TCP/IP
2023-04-12T09:24:16.494437Z    41 Query set autocommit=0
2023-04-12T09:24:16.494571Z    41 Query /*!40101 SET NAMES "utf8mb4"*/
2023-04-12T09:24:16.494700Z    41 Query SHOW VARIABLES LIKE 'wait\_timeout'
2023-04-12T09:24:16.496211Z    41 Query SET SESSION wait_timeout=10000
2023-04-12T09:24:16.496320Z    41 Query SELECT @@SQL_MODE
2023-04-12T09:24:16.496443Z    41 Query SET @@SQL_QUOTE_SHOW_CREATE = 1/*!40101, @@SQL_MODE='NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'*/
2023-04-12T09:24:16.496606Z    41 Query SELECT VERSION()
2023-04-12T09:24:16.496714Z    41 Query SHOW VARIABLES LIKE 'character_set_server'
2023-04-12T09:24:16.497890Z    41 Query SELECT version()
2023-04-12T09:24:16.498032Z    41 Query SHOW VARIABLES LIKE 'version%'
2023-04-12T09:24:16.499070Z    41 Query SHOW ENGINES
2023-04-12T09:24:16.499392Z    41 Query SHOW VARIABLES LIKE 'innodb_version'
2023-04-12T09:24:16.500537Z    41 Query show variables like 'innodb_rollback_on_timeout'
2023-04-12T09:24:16.501484Z    41 Query /*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, @@SQL_MODE := '', @OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, @@SQL_QUOTE_SHOW_CREATE := 1 */
2023-04-12T09:24:16.501583Z    41 Query USE `mts_rpl_test2`
2023-04-12T09:24:16.501665Z    41 Query SHOW CREATE TABLE `mts_rpl_test2`.`mts_test3_arch`
2023-04-12T09:24:16.501849Z    41 Query /*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, @@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */
2023-04-12T09:24:16.502141Z    41 Query SELECT CONCAT(/*!40100 @@session.character_set_connection, */ "")
2023-04-12T09:24:16.502295Z    40 Query SHOW VARIABLES LIKE 'wsrep_on'
2023-04-12T09:24:16.503568Z    40 Query SHOW VARIABLES LIKE 'wsrep_on'
2023-04-12T09:24:16.504761Z    40 Query SHOW VARIABLES LIKE 'version%'
2023-04-12T09:24:16.505724Z    40 Query SHOW ENGINES
2023-04-12T09:24:16.506017Z    40 Query SHOW VARIABLES LIKE 'innodb_version'
2023-04-12T09:24:16.507188Z    40 Query SELECT MAX(`id`) FROM `mts_rpl_test2`.`mts_test3`
2023-04-12T09:24:16.507580Z    40 Query SELECT CONCAT(@@hostname, @@port)
2023-04-12T09:24:16.507709Z    41 Query SELECT CONCAT(@@hostname, @@port)# 确定数据范围,插入新表,归档旧表,重复这个操作达到limit的条数,然后commit
2023-04-12T09:24:16.507988Z    40 Query SELECT /*!40001 SQL_NO_CACHE */ `id`,`name`,`email` FROM `mts_rpl_test2`.`mts_test3` FORCE INDEX(`PRIMARY`) WHERE (id<135887) AND (`id` < '2000001') ORDER BY `id` LIMIT 100
2023-04-12T09:24:16.521222Z    41 Query INSERT INTO `mts_rpl_test2`.`mts_test3_arch`(`id`,`name`,`email`) VALUES ('134887','asd134886','233@qq.com')
2023-04-12T09:24:16.521535Z    40 Query DELETE FROM `mts_rpl_test2`.`mts_test3` WHERE (`id` = '134887')# 简单的心跳检测
2023-04-12T09:24:16.521787Z    40 Query SELECT 'pt-archiver keepalive'# 提交查询并退出,commit是每达到一次limit的条数就进行一次commit,这两个commit是分别提交insert和delete的
2023-04-12T09:24:16.805639Z    41 Query commit
2023-04-12T09:24:16.805790Z    40 Query commit
2023-04-12T09:24:16.805977Z    40 Query SELECT /*!40001 SQL_NO_CACHE */ `id`,`name`,`email` FROM `mts_rpl_test2`.`mts_test3` FORCE INDEX(`PRIMARY`) WHERE (id<135887) AND (`id` < '2000001') AND ((`id` >= '135886')) ORDER BY `id` LIMIT 100
2023-04-12T09:24:16.806178Z    41 Query commit
2023-04-12T09:24:16.806236Z    40 Query commit
2023-04-12T09:24:16.806312Z    40 Quit
2023-04-12T09:24:16.806393Z    41 Quit

三、参数详解

参数 意义
--source 制动归档的表,“i”指定索引,默认使用主键。“a”和“b”选项允许您控制语句如何流经二进制日志。 如果指定“b”选项,二进制日志记录将在指定的连接上被禁用。 如果您指定“a”选项,连接将使用指定的数据库,您可以使用它来防止从服务器使用 --replicate-ignore-db 选项执行二进制日志事件。 这两个选项可以用作实现相同目标的不同方法:将数据从主服务器上归档,但将其保留在从服务器上。 例如,您可以在主服务器上运行清除作业,并使用您选择的方法防止它在从服务器上发生。
--dest 此项指定一个表,pt-archiver 将插入从 --source 归档的行。 它使用与 --source 相同的 key=val 参数格式。 大多数缺失值默认为与 --source 相同的值,因此您不必重复 --source 和 --dest 中相同的选项。 使用 --help 选项查看从 --source 复制了哪些值。
--where 指定 WHERE 子句以限制归档哪些行
--commit-each
--txn-size
--commit-each提交每组获取和归档的行,与--limit配合使用
--txn-size指定每次事务提交的行数
这两个参数是互斥的
--limit 每个语句要获取和归档的行数。默认为一行
--[no]check-charset 是否检查字符集,默认检查
--file 归档到文件中,%D Database name;%t Table name,时间的格式化如例子中所描述,与--output-format结合使用可以指定输出的内容是dump(使用制表符作为分隔符)还是csv(使用逗号作为分隔符),与--header配合使用指定是否打印字段名字在第一行
--sleep
--sleep-coef
--sleep 两次提取中间的休眠时间,默认不休眠
--sleep-coef 指定sleep时间为最后一次 SELECT 时间的多少倍。
--purge 只清除,不归档,最好用--primary-key-only 指定表的主键列。 这将防止无缘无故地从服务器获取所有列。
--ignore
--replace
指定归档的时候insert的方式,这两个参数是互斥的
--pause-file=s 当此参数指定的文件存在时,执行将暂停
--pid=s 创建给定的 PID 文件。如果 PID 文件已存在且其中包含的 PID 与当前 PID 不同,则该工具将不会启动。但是,如果 PID 文件存在并且其中包含的 PID 不再运行,则该工具将使用当前 PID 覆盖 PID 文件。工具退出时,PID 文件会自动删除
--plugin=s 用作通用插件的 Perl 模块名称。
--low-priority-insert

--delayed-insert

两者都是低优先级别插入,两个参数互斥,但是delay将在之后被mysql废除
--share-lock
--for-update
指定加读锁还是写锁,这两个参数是互斥的
--analyze
--optimize
–analyze=ds,为d则在dest上使用analyze,为s则在source上使用analyze,ds则表示两者都执行
–optimize表示执行optimize,使用方式与analyze一直,两个参数互斥
--no-ascend
--no-delete
--no-ascend不使用升序索引优化
--no-delete 不删除数据,两个参数是互斥的
–check-interval=m 定义归档每次暂停多长时间
--check-slave-lag=s 暂停归档,直到此副本的滞后小于–max-lag
--max-lag=m 暂停校验和,直到所有副本的滞后小于此值
--local 不要将 OPTIMIZE 或 ANALYZE 查询写入 binlog。
--channel 指定复制通道
--ascend-first 仅升序第一个索引列
--buffer 指定–file时,仅在事务提交的时候刷新到磁盘
--bulk-delete 批量删除
--[no]bulk-delete-limit 是否开启批量删除限制,delete … limit
--bulk-insert 通过load-data批量插入
--columns=a 归档指定的字段,逗号分隔
--dry-run 试运行,不做任何处理
--max-flow-ctl 试用于pxc集群的类max-lag参数
--progress 指定多少行打印一次进度信息
--slave-user=s 从库用户
--slave-password=s 从库密码
--set-vars 设置执行时的mysql参数
--quick-delete 给delete加quick修饰符
--quiet 不输出任何信息,包括statistics信息
--retries 遇到超时或死锁的重试次数
--run-time 指定运行时间,s=seconds, m=minutes, h=hours, d=days; 如果不指定用的是s,例子:–run-time 600s
--config=A 个逗号分隔的配置文件列表;如果指定,这必须是命令行上的第一个选项
--statistics 收集和打印时间统计数据
--sentinel 默认文件是/tmp/pt-archiver-sentinel,该文件存在则退出归档
--stop 通过创建sentine文件来停止归档

官方文档:参数和使用方式

pt工具的使用(7) pt-archiver的使用相关推荐

  1. MySQL pt工具应用

    MySQL pt工具的应用 1.pt工具安装 [root@master ~]# yum install -y percona-toolkit-3.1.0-2.el7.x86_64.rpm2.常用工具使 ...

  2. mysql Pt工具简单用法

    pt工具 pt-osc 1.安装pt在这里插入代码片 第一步:wget percona.com/get/percona-toolkit.tar.gz 第二步:解压文件 第三步:解压后进入文件 cd c ...

  3. pt工具的使用(1) pt工具的安装

    PT工具是使用Perl语言编写和执行的,所以需要系统中有Perl环境. rpm -qa perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-S ...

  4. pt tools 看介绍说是一款PT工具,具体有什么用呢?

    记得2017年的年尾发布了一款工具,截至今日,已经快2年了.这款名为 pt tools 的工具,已经升级到了5.0版本.经常有萌新问我 比如 pt tools 有哪些功能,或者 pt tools 有什 ...

  5. MCU学习笔记_STA及PT工具

    一.常用命令     1.restore_session         restore_session xx/xx/PTsavesessions/func_hsi_ss_1p35v_125c_max ...

  6. pt工具的使用(4) pt-osc的使用

    一.参数详解 --alter = s 模式修改,不带ALTER TABLE关键字--alter-foreign-keys-method = s 如何修改外键以便它们引用新表--[no]analyze- ...

  7. mysql pt_mysql之pt工具之pt-fifo-split用法介绍

    在工作中用到也比较多,在load data大文件时,如果文件太大会导致主从延时等问题,必须得将文件拆分成许多小文件,使用这个工具就不需要人工进行切割文件. 此工具只能工作在类unix操作系统.具体的可 ...

  8. percona-toolkit(pt工具)使用总结

    1.安装 yum install perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-DBI perl-ExtUtils-CBuilder p ...

  9. mysql pt工具 加索引_[转]MySQL中如何为连接添加索引

    SELECT * FROM tblA, tblB, tblC WHERE tblA.col1 = tblB.col1 AND tblA.col2 = tblC.col1; explain的结果如下: ...

最新文章

  1. 捷报 | 2020年度北京市科学技术奖揭晓!“清华数为”荣获科技进步奖一等奖
  2. 餐巾计划问题 线性规划与网络流24题之10 费用流
  3. 八十三、经典排序算法之堆排序
  4. QQ互联聚合登录中转API程序源码
  5. python获取天气数据_python获取天气数据
  6. 不用AJAX实现前台JS调用后台C#方法(小技巧)
  7. 【数据结构和算法笔记】最小生成树(贪心算法讲解 )
  8. 【DFS】LeetCode 17. Letter Combinations of a Phone Number
  9. javascript中的forEach
  10. 蚁群算法最短路径规划多出口情况及问题答疑
  11. 山西省吕梁市职称计算机考试,山西吕梁考点2012年职称计算机考试时间通知
  12. 古诗词网站源码 php,帝国cms 诗词整站源码
  13. python 回归方程及回归系数的显著性检验_使用Excel和python来做回归分析
  14. 业界安全事件最新动态
  15. autosar arxml文件配置(四)
  16. MSDC 4.3 接口规范(20)
  17. 小程序通过三元运算符设置样式
  18. pythonn 安装包 清华镜像_Python 清华镜像设置
  19. ubuntu18.04 台式机无线网卡TPLink WDN5200H2.0驱动安装
  20. 地热能类毕业论文文献有哪些?

热门文章

  1. #今日论文推荐# 北理工研制机械狗全地形自适应,无需额外视觉感知,可在复杂地形中如履平地
  2. 【RDD】Transformations
  3. 独立站| 智能客服平台:2022年的最终选择
  4. win十下内存测试软件,win10总是蓝频,用自带windows内存诊断检测过没问题
  5. 第二季度企业固定资产盘点怎么破局?
  6. java设置画笔_java 画笔方法
  7. 运用移动BI提升企业运用效率
  8. 游戏互动,用Python点燃【儿童节】的欢乐!
  9. 72年属鼠48岁有一灾2020_1972年多大(72年属鼠48岁有一灾2020)
  10. 苹果a13_苹果扛起性价比大旗,A13+4.7英寸仅3299,买到就是赚