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
     
  • 相关阅读:
    document.getElementById("mytxt").style.left=""style.left在IE的FF中注意
    asp.net 用户控件中 使用相对路径的解决方法 图片路径问题(用户控件、图片路径) ,ResolveUrl
    探索 Block (一) (手把手讲解Block 底层实现原理)
    iOS 多线程开发 (概念与API简介)
    iOS 性能小点
    iOS runtime (二)(runtime学习之AutoCoding源码分析)
    探索 NSRunLoop (二)(NSRunLoop 自己动手实现SimpleRunLoop)
    iOS NSNotificationCenter (自己实现一个通知中心XMCNotificationCenter)
    iOS runtime (三)(runtime学习之YYModel源码分析)
    iOS runtime(一)(runtime 分析理解)
  • 原文地址:https://www.cnblogs.com/allenhu320/p/11338906.html
Copyright © 2011-2022 走看看