1.命令作用
Percona Toolkit有的32个命令,可以分为7大类
工具类别 工具命令 工具作用 备注
开发类
pt-duplicate-key-checker 列出并删除重复的索引和外键
pt-online-schema-change 在线修改表结构
pt-query-advisor 分析查询语句,并给出建议,有bug 已废弃
pt-show-grants 规范化和打印权限
pt-upgrade 在多个服务器上执行查询,并比较不同
性能类
pt-index-usage 分析日志中索引使用情况,并出报告
pt-pmp 为查询结果跟踪,并汇总跟踪结果
pt-visual-explain 格式化执行计划
pt-table-usage 分析日志中查询并分析表使用情况 pt 2.2新增命令
配置类
pt-config-diff 比较配置文件和参数
pt-mysql-summary 对mysql配置和status进行汇总
pt-variable-advisor 分析参数,并提出建议
监控类
pt-deadlock-logger 提取和记录mysql死锁信息
pt-fk-error-logger 提取和记录外键信息
pt-mext 并行查看status样本信息
pt-query-digest 分析查询日志,并产生报告 常用命令
pt-trend 按照时间段读取slow日志信息 已废弃
复制类
pt-heartbeat 监控mysql复制延迟
pt-slave-delay 设定从落后主的时间
pt-slave-find 查找和打印所有mysql复制层级关系
pt-slave-restart 监控salve错误,并尝试重启salve
pt-table-checksum 校验主从复制一致性
pt-table-sync 高效同步表数据
系统类
pt-diskstats 查看系统磁盘状态
pt-fifo-split 模拟切割文件并输出
pt-summary 收集和显示系统概况
pt-stalk 出现问题时,收集诊断数据
pt-sift 浏览由pt-stalk创建的文件 pt 2.2新增命令
pt-ioprofile 查询进程IO并打印一个IO活动表 pt 2.2新增命令
实用类
pt-archiver 将表数据归档到另一个表或文件中
pt-find 查找表并执行命令
pt-kill Kill掉符合条件的sql 常用命令
pt-align 对齐其他工具的输出 pt 2.2新增命令
pt-fingerprint 将查询转成密文 pt 2.2新增命令
2.数据归档实践基本使用方法
pt-archiver
是 Percona Toolkit 中的一个组件,主要用于对 MySQL 表数据进行归档和清除。它可以将数据归档到另一台服务器上的另一张表,或者归档到一个文件中,文件可以使用 LOAD DATA INFILE
进行数据装载。
2.1.归档到文件
pt-archiver --source h=127.0.0.1,P=3306,u=archiver,p='password',D=database,t=table \
--where "create_time >= '2020-01-01' and create_time < '2021-01-01'" \
--charset utf8 \
--bulk-delete \
--limit 1000 \
--commit-each \
--statistics \
--file './%Y-%m-%d-%D.%t'
常用选项
--source
: 指定需要进行归档操作的表,使用 DSN 方式表示。--dest
: 指定要归档到的目标端表,使用 DSN 方式表示。--where
: 指定通过 WHERE 条件语句指定需要归档的数据。--file
: 指定表数据需要归档到的文件。--limit
: 指定每条语句获取表和归档表的行数。--commit-each
: 指定按每次获取和归档的行数进行提交。--bulk-delete
: 使用单个 DELETE 语句删除 chunk 的方式来批量删除行。--bulk-insert
: 使用 LOAD DATA LOCAL INFILE 的方法,通过批量插入的方式来插入行。--progress
: 指定每多少行打印进度信息。--run-time
: 指定工具归档操作在退出之前需要运行的时间。--no-delete
: 指定不删除已被归档的表数据。--charset
,-A
: 指定连接字符集。
例子:
原始表数据如下:
pt-archiver --source h=127.0.0.1,P=3306,u=root,p='123456',D=lewei,t=role \
--where "modifiedDate >= '2020-01-01' and modifiedDate < '2024-01-01'" \
--charset utf8 \
--bulk-delete \
--limit 1000 \
--commit-each \
--statistics \
--file './%Y-%m-%d-%D.%t'
特别注意:语句中 \ 是不能删除的。
执行后:
表中还剩几条数据。
导出的文件:
2.2.归档到另一张表并删除原表数据(不删除的话加上 --no-delete
)
pt-archiver --source h=127.0.0.1,P=3306,u=archiver,p='password',D=database,t=table \
--dest h=127.0.0.1,P=3306,u=archiver,p='password',D=database,t=table_bak \
--where "create_time >= '2020-12-31' and create_time < '2021-01-01'" \
--charset utf8 \
--bulk-delete \
--limit 1000 \
--commit-each \
--statistics \
--bulk-insert
这个命令会将数据归档到 database
数据库中的 table_bak
表,并从原表中删除这些数据。
2.3.只删除数据
pt-archiver --source h=127.0.0.1,P=3306,u=archiver,p='password',D=database,t=table \
--where "create_time >= '2021-01-01' and create_time < '2021-01-02'" \
--charset utf8 \
--bulk-delete \
--limit 1000 \
--commit-each \
--statistics \
--purge \
--primary-key-only
这个命令只会删除 database
数据库中 table
表里 create_time
在 2021-01-01 到 2021-01-02 之间的数据。
3.注意事项
- 确保源表和目标表具有相同的结构。
- 如果使用
--bulk-insert
选项,确保目标数据库有足够的权限和资源来创建临时表并执行批量插入。 - 使用
pt-archiver
时,建议在低峰时段进行,以减少对生产环境的影响。 - 归档操作可能需要一定的时间,特别是处理大量数据时。确保有足够的时间和资源来完成操作。
- 在执行删除操作之前,确保备份了所有重要数据。