pt工具的使用(7) pt-archiver的使用
一、描述
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的使用相关推荐
- MySQL pt工具应用
MySQL pt工具的应用 1.pt工具安装 [root@master ~]# yum install -y percona-toolkit-3.1.0-2.el7.x86_64.rpm2.常用工具使 ...
- mysql Pt工具简单用法
pt工具 pt-osc 1.安装pt在这里插入代码片 第一步:wget percona.com/get/percona-toolkit.tar.gz 第二步:解压文件 第三步:解压后进入文件 cd c ...
- pt工具的使用(1) pt工具的安装
PT工具是使用Perl语言编写和执行的,所以需要系统中有Perl环境. rpm -qa perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-S ...
- pt tools 看介绍说是一款PT工具,具体有什么用呢?
记得2017年的年尾发布了一款工具,截至今日,已经快2年了.这款名为 pt tools 的工具,已经升级到了5.0版本.经常有萌新问我 比如 pt tools 有哪些功能,或者 pt tools 有什 ...
- MCU学习笔记_STA及PT工具
一.常用命令 1.restore_session restore_session xx/xx/PTsavesessions/func_hsi_ss_1p35v_125c_max ...
- pt工具的使用(4) pt-osc的使用
一.参数详解 --alter = s 模式修改,不带ALTER TABLE关键字--alter-foreign-keys-method = s 如何修改外键以便它们引用新表--[no]analyze- ...
- mysql pt_mysql之pt工具之pt-fifo-split用法介绍
在工作中用到也比较多,在load data大文件时,如果文件太大会导致主从延时等问题,必须得将文件拆分成许多小文件,使用这个工具就不需要人工进行切割文件. 此工具只能工作在类unix操作系统.具体的可 ...
- percona-toolkit(pt工具)使用总结
1.安装 yum install perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-DBI perl-ExtUtils-CBuilder p ...
- mysql pt工具 加索引_[转]MySQL中如何为连接添加索引
SELECT * FROM tblA, tblB, tblC WHERE tblA.col1 = tblB.col1 AND tblA.col2 = tblC.col1; explain的结果如下: ...
最新文章
- 捷报 | 2020年度北京市科学技术奖揭晓!“清华数为”荣获科技进步奖一等奖
- 餐巾计划问题 线性规划与网络流24题之10 费用流
- 八十三、经典排序算法之堆排序
- QQ互联聚合登录中转API程序源码
- python获取天气数据_python获取天气数据
- 不用AJAX实现前台JS调用后台C#方法(小技巧)
- 【数据结构和算法笔记】最小生成树(贪心算法讲解 )
- 【DFS】LeetCode 17. Letter Combinations of a Phone Number
- javascript中的forEach
- 蚁群算法最短路径规划多出口情况及问题答疑
- 山西省吕梁市职称计算机考试,山西吕梁考点2012年职称计算机考试时间通知
- 古诗词网站源码 php,帝国cms 诗词整站源码
- python 回归方程及回归系数的显著性检验_使用Excel和python来做回归分析
- 业界安全事件最新动态
- autosar arxml文件配置(四)
- MSDC 4.3 接口规范(20)
- 小程序通过三元运算符设置样式
- pythonn 安装包 清华镜像_Python 清华镜像设置
- ubuntu18.04 台式机无线网卡TPLink WDN5200H2.0驱动安装
- 地热能类毕业论文文献有哪些?
热门文章
- #今日论文推荐# 北理工研制机械狗全地形自适应,无需额外视觉感知,可在复杂地形中如履平地
- 【RDD】Transformations
- 独立站| 智能客服平台:2022年的最终选择
- win十下内存测试软件,win10总是蓝频,用自带windows内存诊断检测过没问题
- 第二季度企业固定资产盘点怎么破局?
- java设置画笔_java 画笔方法
- 运用移动BI提升企业运用效率
- 游戏互动,用Python点燃【儿童节】的欢乐!
- 72年属鼠48岁有一灾2020_1972年多大(72年属鼠48岁有一灾2020)
- 苹果a13_苹果扛起性价比大旗,A13+4.7英寸仅3299,买到就是赚