翼度科技»论坛 编程开发 mysql 查看内容

Percona Toolkit 神器全攻略(实用类)

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
Percona Toolkit 神器全攻略(实用类)


Percona Toolkit 神器全攻略系列共八篇,前文回顾:
前文回顾Percona Toolkit 神器全攻略
全文约定:$为命令提示符、greatsql>为GreatSQL数据库提示符。在后续阅读中,依据此约定进行理解与操作
实用类

在Percona Toolkit中实用类共有以下工具

  • pt-align:将其它工具输出内容与列对齐
  • pt-archiver:将表中的行存档到另一个表或文件中
  • pt-find:查找表并执行命令
  • pt-fingerprint:将查询转成密文
  • pt-kill:Kill掉符合条件的SQL
  • pt-k8s-debug-collector:从 k8s/OpenShift 集群收集调试数据(日志、资源状态等)
  • pt-secure-collect:收集、清理、打包和加密数据
pt-align

概要

通过读取行并将其分成单词的方式来执行列对齐。该工具首先计算每行包含的单词数量,并尝试确定是否有一个占主导地位的数字,将其假设为每行的单词数量。接下来,pt-align会排除所有不符合该数量的行,并将下一行视为第一个非标题行。根据每个单词是否看起来像数字,它会决定列的对齐方式。最后,工具会遍历数据集,确定每列的宽度,并将它们格式化打印出来。
这对于调整vmstat或iostat的输出非常有帮助,使其更易于阅读。
用法
将其它工具的输出与列对齐,如果未指定FILES(文件)则读取STDIN(输入)

  • pt-align [FILES]
如果工具打印以下输出(没有对齐)
  1. DATABASE TABLE   ROWS
  2. foo      bar      100
  3. long_db_name table  1
  4. another  long_name 500
复制代码
使用 pt-align 将输出重新打印为(有对齐)
  1. DATABASE     TABLE     ROWS
  2. foo          bar        100
  3. long_db_name table        1
  4. another      long_name  500
复制代码
选项

该工具的命令行参数如下
参数含义--help帮助,显示帮助并退出--version版本,显示版本并推出最佳实践

对齐vmstat

当查看 vmstat 时,有时会遇到列对齐不整齐的情况。此时,可以使用 pt-align 工具来解决这个问题
  1. # 未使用pt-align工具
  2. $ vmstat
  3. procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
  4. r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
  5. 1  0 205472 181304     60 948960    0    0     0     1    1    1  1  2 98  0  0
  6. # 使用pt-align工具
  7. $ vmstat | pt-align
  8. r b   swpd   free buff  cache si so bi bo in cs us sy id wa st
  9. 2 0 205472 181260   60 948992  0  0  0  1  1  1  1  2 98  0  0
复制代码
对齐iostat

当查看 iostat 时,有时会遇到列对齐不整齐的情况。此时,可以使用 pt-align 工具来解决这个问题
  1. # 未使用pt-align工具
  2. $ iostat
  3. avg-cpu:  %user   %nice %system %iowait  %steal   %idle
  4.            0.86    0.00    1.51    0.00    0.00   97.62
  5. Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
  6. sda               0.11         0.33         1.31    6746368   27046909
  7. dm-0              0.09         0.30         1.23    6263958   25261569
  8. dm-1              0.03         0.02         0.09     452072    1782864
  9. # 使用pt-align工具
  10. $ iostat | pt-align
  11. 0.86    0.00 1.51      0.00      0.00    97.62   
  12. Device: tps  kB_read/s kB_wrtn/s kB_read kB_wrtn
  13. sda     0.11 0.33      1.31      6746368 27049993
  14. dm-0    0.09 0.30      1.23      6263958 25264653
  15. dm-1    0.03 0.02      0.09      452072  1782864
复制代码
pt-archiver

将MySQL/GreatSQL表中的行存档到另一个表或文件中
概要

pt-archiver 是一款在线归档工具,不会影响生产,但是用此命令操作的表必须要有主键,它可以实现如下功能:

  • 归档历史数据
  • 在线删除大量数据
  • 数据导出和备份
  • 数据远程归档
  • 数据清理
用法

  • pt-archiver [OPTIONS] --source DSN --where WHERE
将表从oltp实例归档到olap的实例中
  1. $ 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
复制代码
从子表删除孤立行
  1. $ pt-archiver --source h=host,D=db,t=child --purge --where 'NOT EXISTS(SELECT * FROM parent WHERE col=child.col)'
复制代码
选项


  • 至少指定 --dest 、 --file 或 --purge 之一
  • 如果 COPY 为 yes, --dest 中的 DSN 值默认为 --source 中的值
部分参数选项存在互斥,不可同时存在,详见:
选项A选项B关系--ignore--replace互斥--txn-size--commit-each互斥--low-priority-insert--delayed-insert互斥--share-lock--for-update互斥--analyze--optimize互斥--no-ascend--no-delete互斥所有参数选项如下:
参数含义--analyze为d则在dest上使用analyze,为s则在source上使用analyze,ds则表示两者都执行--ascend-first仅升序第一个索引列--ask-pass连接 MySQL/GreatSQL 时提示输入密码--buffer指定file时,仅在事务提交的时候刷新到磁盘--bulk-delete批量删除--[no]bulk-delete-limit是否开启批量删除限制,delete ... limit--bulk-insert通过LOAD DATA批量插入--channel指定复制通道--charset字符集--[no]check-charset是否检查字符集,默认检查--[no]check-columns检查列,确保 --source 和 --dest 具有相同的列--check-interval定义归档每次暂停多长时间--check-slave-lag暂停归档,直到此副本的滞后小于--max-lag--columns归档指定的字段,逗号分隔--commit-each提交每组获取和归档的行,与--limit配合使用--config读取这个逗号分隔的配置文件列表,如果指定,这必须是命令行上的第一个选项--database连接到该数据库--delayed-insert将 DELAYED 修饰符添加到 INSERT 或 REPLACE 语句,低优先级插入。
不过此参数在5.6版本弃用,8.0版本不支持,服务器识别但忽略DELAYED关键字--dest此项指定一个表。pt-archiver 将插入从 --source 归档的行。 它使用与 --source 相同的 key=val 参数格式。 大多数缺失值默认为与 --source 相同的值,因此您不必重复 --source 和 --dest 中相同的选项。 使用 --help 选项查看从 --source 复制了哪些值。--dry-run打印查询并退出而不执行任何操作--file要存档到的文件,%D Database name;%t Table name,时间的格式化如例子中所描述,与--output-format结合使用可以指定输出的内容是dump(使用制表符作为分隔符)还是csv(使用逗号作为分隔符),与--header配合使用指定是否打印字段名字在第一行--for-update指定加读锁还是写锁。将 FOR UPDATE 修饰符添加到 SELECT 语句。与--share-lock互斥。--header在--file顶部打印列标题--help显示帮助--high-priority-select将 HIGH_PRIORITY 修饰符添加到 SELECT 语句。只适用表级别存储引擎(MyISAM、MEMORY等)--host连接到主机--ignore忽略在执行INSERT时出现的可忽略错误。与--replace互斥--limit每个语句要获取和归档的行数。默认为一行--local不要将 OPTIMIZE 或 ANALYZE 查询写入 binlog--low-priority-delete将 LOW_PRIORITY 修饰符添加到 DELETE 语句。此时会延迟执行该 DELETE 直到没有其他客户端从表中读取数据为止。只适用表级别存储引擎(MyISAM、MEMORY等)--low-priority-insert低优先级插入。只适用表级别存储引擎(MyISAM、MEMORY等)--max-flow-ctl用于pxc集群的类max-lag参数--max-lag暂停校验和,直到所有副本的滞后小于此值--no-ascend不使用升序索引优化。和no-delete互斥--no-delete不删除数据。和no-ascend互斥--optimize表示执行optimize,使用方式与analyze一致。和analyze互斥--output-format与--file一起使用指定输出格式--password连接时使用的密码--pid创建给定的 PID 文件。如果 PID 文件已存在且其中包含的 PID 与当前 PID 不同,则该工具将不会启动。但是,如果 PID 文件存在并且其中包含的 PID 不再运行,则该工具将使用当前 PID 覆盖 PID 文件。工具退出时,PID 文件会自动删除--plugin用作通用插件的 Perl 模块名称--port用于连接的端口号--primary-key-only仅主键列。使用主键列指定--columns的快捷方式--progress指定多少行打印一次进度信息--purge只清除,不归档。最好配合 --primary-key-only 指定表的主键列。这将防止无缘无故地从服务器获取所有列。--quick-delete给DELETE加quick修饰符。使用 QUICK 修饰符时,存储引擎不会合并索引叶子节点,从而提高删除操作的速度。只适用表级别存储引擎(MyISAM、MEMORY等)--quiet不输出任何信息,包括statistics信息--replace导致--dest中的 INSERT 被写入 REPLACE。与--ignore互斥--retries遇到超时或死锁的重试次数--run-time指定运行时间,s=seconds, m=minutes, h=hours, d=days; 如果不指定用的是s--[no]safe-auto-increment不要归档具有最大 AUTO_INCRMENT 的行--sentinel默认文件是/tmp/pt-archiver-sentinel,该文件存在则退出归档--slave-user从库用户--slave-password从库密码--set-vars设置执行时的MySQL/GreatSQL参数--share-lock指定加读锁还是写锁。将 LOCK IN SHARE MODE 修饰符添加到 SELECT 语句。与--for-update互斥--skip-foreign-key-checks使用 SET FOREIGN_KEY_CHECKS=0 禁用外键检查--sleep两次提取中间的休眠时间,默认不休眠--sleep-coef指定sleep时间为最后一次 SELECT 时间的多少倍--socket用于连接的套接字文件--source对于制动归档的表,选项“i”用于指定索引,默认情况下使用主键。选项“a”和“b”可用于调整语句通过二进制日志的流向。使用“b”选项会禁用指定连接上的二进制日志记录。若选择“a”选项,则连接将使用指定的数据库,可通过此方式防止二进制日志事件在服务器上执行时使用 --replicate-ignore-db 选项。这两个选项提供了实现相同目标的不同方法,即将数据从主服务器归档,同时在从服务器上保留它。可以在主服务器上运行清理作业,并通过所选方式防止其在从服务器上执行。--statistics收集和打印时间统计数据--stop通过创建sentine文件来停止归档--txn-size指定每次事务提交的行数。与commit-each互斥--unstop删除sentine文件--user登录的用户--version显示版本号--[no]version-check自动检查更新功能,默认是检查的--where指定 WHERE 子句限制归档哪些行。如果不需要 WHERE 条件,可使用 WHERE 1=1--why-quit打印退出原因最佳实践

创建一张archiver_test表,并生成1000条数据
  1. greatsql> CREATE TABLE archiver_test (
  2.     id INT PRIMARY KEY AUTO_INCREMENT,
  3.     name VARCHAR(255),
  4.     age INT,
  5.     gender VARCHAR(10),
  6.     timestamp TIMESTAMP
  7. );
  8. greatsql> select count(*) from archiver_test;
  9. +----------+
  10. | count(*) |
  11. +----------+
  12. |     1000 |
  13. +----------+
  14. 1 row in set (0.01 sec)
复制代码
在使用过程中可能会需要依赖例如:Cannot connect to MySQL because the Perl DBD::mysql module is not installed or not found.此时按提示安装相应依赖包即可
归档到同一实例上的不同表

注意!此操作会删除源表的数据,若不删除源表数据请加上使用--no-delete
[code]$ pt-archiver --source h=localhost,P=3306,u=root,D=test_db,t=archiver_test --charset=utf8mb4  --ask-pass --dest h=localhost,P=3306,u=root,D=test_db,t=archiver_test2 --ask-pass --where "id

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具