zoukankan      html  css  js  c++  java
  • pt工具

    percona-toolkit简介
    percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql任务和系统任务,这些任务包括:
     检查master和slave数据的一致性
     有效地对记录进行归档
     查找重复的索引
     对服务器信息进行汇总
     分析来自日志和tcpdump的查询
     当系统出问题的时候收集重要的系统信息
    这些工具主要包括开发、性能、配置、监控、复制、系统、实用六大类,作为一个优秀的DBA,里面有的工具非常有用,如果能掌握并加以灵活应用,将能极大的提高工作效率。
     
    percona-toolkit工具包安装
    percona-toolkit-2.2.18-1.noarch.rpm
    percona-toolkit-2.2.18.tar.gz
     
    [root@mysql1 /]# yum install percona-toolkit-2.2.18-1.noarch.rpm

    (一) 开发类工具
    1.pt-duplicate-key-checker
    功能介绍:
    功能为从mysql表中找出重复的索引和外键,这个工具会将重复的索引和外键都列出来,并生成了删除重复索引的语句,非常方便
    包含比较多的选项,具体的可以通过命令pt-duplicate-key-checker --help来查看具体支持那些选项
    pt-duplicate-key-checker --host=localhost --user=system --password=123456 --databases=test
     
    2.pt-online-schema-change
    功能介绍:
    功能为在alter操作更改表结构的时候不用锁定表,也就是说执行alter的时候不会阻塞写和读取操作,注意执行这个工具的时候必须做好备份,操作之前最好详细读一下官方文档
    工作原理是创建一个和你要执行alter操作的表一样的空表结构,执行表结构修改,然后从原表中copy原始数据到表结构修改后的表,当数据copy完成以后就会将原表移走,用新表代替原表,
    默认动作是将原表drop掉。在copy数据的过程中,任何在原表的更新操作都会更新到新表,因为这个工具在会在原表上创建触发器,触发器会将在原表上更新的内容更新到新表。如果表中已经定义了触发器这个工具就不能工作了。
    大表添加字段
    pt-online-schema-change --user=system --password=123456 --host=localhost --alter="ADD COLUMN domain_id INT" D=test,t=t --execute
    pt-online-schema-change --host='10.10.100.119' --port=3306 --user='root' --password='aSv_y8c_Bup_UqF' --charset=utf8 --alter "add COLUMN retention_flag int(11)" D=tms_production,t=waybill --execute --alter-foreign-keys-method=rebuild_constraints
     
    3.pt-show-grants
    功能介绍:
    规范化和打印mysql权限,让你在复制、比较mysql权限以及进行版本控制的时候更有效率!
    查看指定mysql的所有用户权限:
    pt-show-grants --host='localhost' --user='system' --password='123456'
    查看指定数据库的权限:
    pt-show-grants --host='localhost' --user='system' --password='123456' --database='test'
     
    4.pt-upgrade
    功能介绍:
    在多台服务器上执行查询,并比较有什么不同!这在升级服务器的时候非常有用,可以先安装并导数据到新的服务器上,然后使用这个工具跑一下sql看看有什么不同,可以找出不同版本之间的差异。
    pt-upgrade h='localhost' h=192.168.1.202 --user='system' --password='123456' --query="select * from mysql.user limit 5"

    (二) 性能类工具
    1.pt-index-usage
    功能介绍:
    从log文件中读取查询语句,并用explain分析他们是如何利用索引。完成分析之后会生成一份关于索引没有被查询使用过的报告。
    pt-index-usage /data/mysqldata/3306/slow_query.log --host='localhost' --user='system' --password='123456'
     
    2.pt-pmp
    功能介绍:
    为查询程序执行聚合的GDB堆栈跟踪,先进行堆栈跟踪,然后将跟踪信息汇总。
    pt-pmp -p 21933
    pt-pmp -b /usr/local/mysql/bin/mysqld_safe
     
    3.pt-visual-explain
    功能介绍:
    格式化explain出来的执行计划按照tree方式输出,方便阅读。
    pt-visual-explain a.txt
    mysql -usystem -p123456 -e "explain select * from mysql.user" | pt-visual-explain

    (三) 配置类工具
    1.pt-config-diff
    功能介绍:
    比较mysql配置文件和服务器参数
    pt-config-diff h=localhost h=192.168.1.202 --user='system' --password='123456'
     
    2.pt-mysql-summary
    功能介绍:
    精细地对mysql的配置和status信息进行汇总
    pt-mysql-summary --user='system' --password='123456' --host=localhost
     
    3.pt-variable-advisor
    功能介绍:
    分析mysql的参数变量,并对可能存在的问题提出建议
    有格式要求
    pt-variable-advisor --user='system' --password='123456' --source-of-variables /data/mysqldata/3306/my.cnf

    (四) 监控类工具
    1.pt-deadlock-logger
    功能介绍:
    提取和记录mysql死锁的相关信息
    pt-deadlock-logger --user='system' --password='123456' h=localhost –print
     
    2.pt-fk-error-logger
    功能介绍:
    提取和记录mysql外键错误信息
     
    3.pt-mext
    功能介绍:
    并行查看SHOW GLOBAL STATUS的多个样本的信息。
     
    4.pt-query-digest
    功能介绍:
    分析查询执行日志,并产生一个查询报告
    直接分析慢查询文件:
    pt-query-digest  slow.log > slow_report.log
    分析最近12小时内的查询:
    pt-query-digest  --since=12h  slow.log > slow_report2.log
    分析指定时间范围内的查询:
    pt-query-digest slow.log --since '2017-01-07 09:30:00' --until '2017-01-07 10:00:00' > slow_report3.log
    针对某个用户的慢查询
    pt-query-digest --filter '($event->{user} || "") =~ m/^root/i' slow.log> slow_report5.log
    查询所有所有的全表扫描或full join的慢查询
    pt-query-digest --filter '(($event->{Full_scan} || "") eq "yes") ||(($event->{Full_join} || "") eq "yes")' slow.log> slow_report6.log
    把查询保存到query_review表
    pt-query-digest --user=root –password=abc123 --review  h=localhost,D=test,t=query_review--create-review-table  slow.log
    把查询保存到query_history表
    pt-query-digest  --user=root –password=abc123 --review  h=localhost,D=test,t=query_history--create-review-table  slow.log_0001
    pt-query-digest  --user=root –password=abc123 --review  h=localhost,D=test,t=query_history--create-review-table  slow.log_0002
     
    (五) 复制类工具
    1.pt-heartbeat
    功能介绍:
    监控mysql复制延迟
     
    2.pt-slave-delay
    功能介绍:
    设置从服务器落后于主服务器指定时间。
     
    3.pt-slave-find
    功能介绍:
    查找和打印mysql所有从服务器复制层级关系
    pt-slave-find -ubluewhale -p --host=10.9.97.224
    bluewhale001
     
    4.pt-slave-restart
    功能介绍:
    监视mysql复制错误,并尝试重启mysql复制当复制停止的时候
     
    5.pt-table-checksum
    功能介绍:
    检查mysql复制一致性
     
    6.pt-table-sync
    功能介绍:
    高效同步mysql表的数据
     
    7.pt-table-usage
    功能介绍:
    分析如何使用mysql中的表

    (六) 系统类工具
    1.pt-diskstats
    功能介绍:
    是一个对GUN/LINUX的交互式监控工具

    (七) 实用类工具
    1.pt-archiver
    功能介绍:
    将mysql数据库中表的记录归档到另外一个表或者文件,也可以直接进行记录的删除操作。
     
    2.pt-find
    功能介绍:
    查找mysql表并执行指定的命令,和gnu的find命令类似
     
    3.pt-kill
    功能介绍:
    kill掉符合指定条件mysql语句
    pt-kill --log-dsn D=test,t=kill_log --create-log-table --host=192.168.1.122 --user=root --password=msds007 --port=3306 --busy-time=10 --print --kill-query --match-info "SELECT|select"  --victims all
    pt-kill --log-dsn D=test,t=kill_log --create-log-table --host=192.168.1.122 --user=root --password=msds007 --port=3306 --busy-time=10 --print --kill-query --match-info "SELECT|select"
    pt-kill --log-dsn D=test,t=kill_log --create-log-table --host=192.168.1.122 --user=root --password=msds007 --port=3306 --busy-time=10 --print --kill --match-info "SELECT|select"

    pt-kill --no-version-check --host 10.10.208.34 --port 3306 --user 'root' --password 'XtVha6_SdWYNxGdY' --charset utf8 --match-command Query --match-user us_rwx --busy-time 3 --kill --victims all --interval 10 --print
    pt-kill --no-version-check --host 10.10.208.182 --port 3306 --user 'root' --password 'n4ut-A-b9YRkrOBg' --charset utf8 --match-command Query --match-user us_rwx --busy-time 3 --kill --victims all --interval 10 --print

    pt-align 对文件格式进行格式化输出
    pt-fifo-split 将文件分割成多个数据块(chunks),从而控制每次传输到mysql服务器的数据量大小
    pt-fingerprint 用于生成查询指纹。主要将将sql查询生成queryID,pt-query-digest中的ID即是通过此工具来完成的。类似于Oracle中的SQL_ID,涉及绑定变量,字面量等
    pt-ioprofile 用于分析查看mysql的真实IO情况
    pt-stalk 出现问题的时候收集mysql的用于诊断的数据
    pt-summary 打印出来的信息包括:CPU、内存、硬盘、网卡等信息,还包括文件系统、磁盘调度和队列大小、LVM、RAID、网络链接信息、netstat 的统计,以及前10的负载占用信息和vmstat信息。
     
     
    利用percona-toolkit工具检查MySQL数据库主从一致性及修复
    一、pt-table-checksum检查主从库数据的一致性
    pt-table-checksum在MASTER上校验指定库、表,将结果存在一个库表里,复制进程将检验sql传递到slave上再执行一次。
    通过比较M/S的检验值确定数据是否一致。利用主从复制做检验,不需要在检验期间对主从数据库同时锁表,可以控制校验的数据和速度,不影响到正常服务。
    主库执行
    (system@localhost) [(none)]> set global binlog_format=statement;
    Query OK, 0 rows affected (0.00 sec)
     
    [root@mysql1 ~]# pt-table-checksum --user='system' --password='123456' -S /data/mysqldata/3306/mysql.sock
    主库
    表要有主键
    (system@localhost) [test]> select * from t;
    +------+
    | i    |
    +------+
    |   16 |
    |   17 |
    |   18 |
    |   19 |
    |   20 |
    +------+
    5 rows in set (0.00 sec)
     
    从库1
    (system@localhost) [test]> select * from t;
    +------+
    | i    |
    +------+
    |   16 |
    |   19 |
    |   20 |
    +------+
    3 rows in set (0.00 sec)
     
    从库2
    (system@localhost) [test]> select * from t;
    +------+
    | i    |
    +------+
    |   16 |
    |   17 |
    |   18 |
    +------+
    3 rows in set (0.00 sec)
     
    #!/bin/bash
    NUM=$(/usr/bin/pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=huanqiu.checksums --databases=huanqiu  h=192.168.1.101,u=root,p=123456,P=3306|awk -F" " '{print $3}'|sed -n '2p')
    if [ $NUM -eq 1 ];then
      /usr/bin/pt-table-sync --replicate=huanqiu.checksums h=192.168.1.101,u=root,p=123456 h=192.168.1.102,u=root,p=123456 --print
      /usr/bin/pt-table-sync --replicate=huanqiu.checksums h=192.168.1.101,u=root,p=123456 h=192.168.1.102,u=root,p=123456 --execute
    else
      echo "data is ok"
    fi
     
    pt-table-checksum --recursion-method="processlist" --no-check-binlog-format --replicate=test.checksums --databases=huanqiu  h=192.168.1.101,u=root,p=123456,P=3306
     

    二、pt-table-sync修复从库不一致的数据
    主库执行
    grant all on *.* to 'system'@'%' identified by '123456';
    (system@localhost) [test]> create table user(id int primary key,name varchar(10));
    (system@localhost) [test]> insert into user values (1,'abc');
    (system@localhost) [test]> insert into user values (2,'def');
    (system@localhost) [test]> insert into user values (3,'ghi');
     
    pt-table-sync: 高效的同步MySQL表之间的数据,他可以做单向和双向同步的表数据。他可以同步单个表,也可以同步整个库。它不同步表结构、索引、或任何其他模式对象。所以在修复一致性之前需要保证他们表存在。
    从库执行,没有不一致的数据
    pt-table-sync --print --sync-to-master h=192.168.1.202,u=system,p=123456,P=3306,D=test,t=user
    pt-table-sync --print --sync-to-master h=192.168.1.203,u=system,p=123456,P=3306,D=test,t=user
     
    mysql2添加一条记录
    (system@localhost) [test]> insert into user values (4,'jkl');
    mysql3删除一条记录
    (system@localhost) [test]> delete from user where id=2;
     
    从库执行,将不一致的数据打印出来
    pt-table-sync --print --sync-to-master h=192.168.1.202,u=system,p=123456,P=3306,D=test,t=user --charset=utf8
    pt-table-sync --print --sync-to-master h=192.168.1.203,u=system,p=123456,P=3306,D=test,t=user --charset=utf8
     
    从库执行,修复不一致的数据
    pt-table-sync --execute --sync-to-master h=192.168.1.202,u=system,p=123456,P=3306,D=test,t=user --charset=utf8
    pt-table-sync --execute --sync-to-master h=192.168.1.203,u=system,p=123456,P=3306,D=test,t=user --charset=utf8
     
    从库执行,没有不一致的数据
    pt-table-sync --print --sync-to-master h=192.168.1.202,u=system,p=123456,P=3306,D=test,t=user --charset=utf8
    pt-table-sync --print --sync-to-master h=192.168.1.203,u=system,p=123456,P=3306,D=test,t=user --charset=utf8
    pt-table-sync --print --sync-to-master h=192.168.1.202,u=system,p=123456,P=3306 --databases test --charset=utf8
    pt-table-sync --print --sync-to-master h=192.168.1.203,u=system,p=123456,P=3306 --databases test --charset=utf8
     
    主库执行,添加表
    pt-heartbeat --user='system' --password='123456' -S /data/mysqldata/3306/mysql.sock -D test --master-server-id=201 --create-table --update
    在后台持续更新主库上的heartbeat
    pt-heartbeat --user='system' --password='123456' -S /data/mysqldata/3306/mysql.sock -D test --master-server-id=201 --update &
     
    持续查看从库上的延迟情况
    pt-heartbeat --user='system' --password='123456' -S /data/mysqldata/3306/mysql.sock -D test --master-server-id=201 --monitor --print-master-server-id
    单次查看从库上的延迟情况
    pt-heartbeat --user='system' --password='123456' -S /data/mysqldata/3306/mysql.sock -D test --master-server-id=201 --check
     
    使用守护进程监控从库并输出日志
    pt-heartbeat --user='system' --password='123456' -S /data/mysqldata/3306/mysql.sock -D test --master-server-id=201 --monitor --print-master-server-id --daemonize --log=/tmp/slave-lag.log
     
    #下面是定期过滤--log文件中最大值的脚本,加入监控调用即可:
    #!/bin/bash
    cat /tmp/b.txt > /tmp/b_tmp.txt
    echo > /tmp/b.txt
    max_time=`cat /tmp/b_tmp.txt |grep -v '^$' |awk '{print $1}' |sort -k1nr |head -1`
    echo "$max_time"

    停止主库上的pt-heartbeat守护进程
    pt-heartbeat --stop
     

    打印MySQL复制的层次结构
    pt-slave-find -h 192.168.1.201 -u system -p 123456 -P 3306

    分析慢查询日志
    pt-query-digest --user='system' --password='123456' /data/mysqldata/3306/slow_query.log

    分析慢查询中索引和表使用情况
    pt-index-usage --h localhost --user='system' --password='123456' -S /data/mysqldata/3306/mysql.sock /data/mysqldata/3306/slow_query.log
    pt-table-usage --h localhost --user='system' --password='123456' -S /data/mysqldata/3306/mysql.sock /data/mysqldata/3306/slow_query.log
     
  • 相关阅读:
    [算法分析]计数排序
    [置顶] 基于stm32f103zet6之UC/OS_II的学习1(初步移植OS点灯大法)
    IOS开发(59)之Block Object的调用
    【译】测试员,敢问路在何方?来自微软工程师
    各种字符串hash
    hdu 2579 BFS
    qq相册
    程序人生之我们的故事:十年如歌(9)
    关联模型和无限极分类
    十大技巧破解电话面试
  • 原文地址:https://www.cnblogs.com/allenhu320/p/11338906.html
Copyright © 2011-2022 走看看