pt工具
percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql任务和系统任务,这些任务包括:
检查master和slave数据的一致性
有效地对记录进行归档
查找重复的索引
对服务器信息进行汇总
分析来自日志和tcpdump的查询
当系统出问题的时候收集重要的系统信息
这些工具主要包括开发、性能、配置、监控、复制、系统、实用六大类,作为一个优秀的DBA,里面有的工具非常有用,如果能掌握并加以灵活应用,将能极大的提高工作效率。
percona-toolkit-2.2.18-1.noarch.rpm
percona-toolkit-2.2.18.tar.gz
1.pt-duplicate-key-checker
功能介绍:
功能为从mysql表中找出重复的索引和外键,这个工具会将重复的索引和外键都列出来,并生成了删除重复索引的语句,非常方便
包含比较多的选项,具体的可以通过命令pt-duplicate-key-checker --help来查看具体支持那些选项
pt-duplicate-key-checker --host=localhost --user=system --password=123456 --databases=test
功能介绍:
功能为在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
功能介绍:
规范化和打印mysql权限,让你在复制、比较mysql权限以及进行版本控制的时候更有效率!
查看指定mysql的所有用户权限:
pt-show-grants --host='localhost' --user='system' --password='123456'
查看指定数据库的权限:
pt-show-grants --host='localhost' --user='system' --password='123456' --database='test'
功能介绍:
在多台服务器上执行查询,并比较有什么不同!这在升级服务器的时候非常有用,可以先安装并导数据到新的服务器上,然后使用这个工具跑一下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'
功能介绍:
为查询程序执行聚合的GDB堆栈跟踪,先进行堆栈跟踪,然后将跟踪信息汇总。
pt-pmp -p 21933
pt-pmp -b /usr/local/mysql/bin/mysqld_safe
功能介绍:
格式化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'
功能介绍:
精细地对mysql的配置和status信息进行汇总
pt-mysql-summary --user='system' --password='123456' --host=localhost
功能介绍:
分析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
功能介绍:
提取和记录mysql外键错误信息
功能介绍:
并行查看SHOW GLOBAL STATUS的多个样本的信息。
功能介绍:
分析查询执行日志,并产生一个查询报告
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复制延迟
功能介绍:
设置从服务器落后于主服务器指定时间。
功能介绍:
查找和打印mysql所有从服务器复制层级关系
pt-slave-find -ubluewhale -p --host=10.9.97.224
bluewhale001
功能介绍:
监视mysql复制错误,并尝试重启mysql复制当复制停止的时候
功能介绍:
检查mysql复制一致性
功能介绍:
高效同步mysql表的数据
功能介绍:
分析如何使用mysql中的表
1.pt-diskstats
功能介绍:
是一个对GUN/LINUX的交互式监控工具
1.pt-archiver
功能介绍:
将mysql数据库中表的记录归档到另外一个表或者文件,也可以直接进行记录的删除操作。
功能介绍:
查找mysql表并执行指定的命令,和gnu的find命令类似
功能介绍:
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.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-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信息。
一、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)
表要有主键
(system@localhost) [test]> select * from t;
+------+
| i |
+------+
| 16 |
| 17 |
| 18 |
| 19 |
| 20 |
+------+
5 rows in set (0.00 sec)
(system@localhost) [test]> select * from t;
+------+
| i |
+------+
| 16 |
| 19 |
| 20 |
+------+
3 rows in set (0.00 sec)
(system@localhost) [test]> select * from t;
+------+
| i |
+------+
| 16 |
| 17 |
| 18 |
+------+
3 rows in set (0.00 sec)
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
主库执行
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 --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
(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
#!/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 --stop
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
pt工具的更多相关文章
- 快速安装Percona pt工具
yum install perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-Time-HiRes perl-IO-Socket-SSLwget http://pk ...
- pt工具主从一致性检查并修复以及版本3.0.4的版本缺点
pt-table-checksum和pt-table-sync分别检验master-slave的数据不一致并修复. 1.本次测试环境 [root@172-16-3-190 we_ops_admin]# ...
- pt工具校验主从数据一致性之dsns方式
mysql主从数据一致性校验,常用的方法是Percona-Toolkit的组件pt-table-checksum,这东西怎么用网上一大堆,就不啰嗦了.主要说一下通过dsns方式发现从库的一种方式. p ...
- mysql瑞士军刀–pt工具
Percona-Toolkits Percona-toolkit 简介 percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql任务和系统任务,这些 ...
- pt工具加字段脚本
#!/bin/bashcnn_db=$1table=$2alter_conment=$3 cnn_host='192.168.10.14'cnn_user='root'cnn_pwd='123456' ...
- pt工具之pt-archiver
# tar -zxvf percona-toolkit-2.2.17.tar.gz# yum -y install perl perl-IO-Socket-SSL perl-DBD-MySQL per ...
- iptables防火墙原理详解+mysql pt工具
http://seanlook.com/2014/02/23/iptables-understand/
- mysql 案例 ~ pt校验工具介绍
简介:今天咱们来聊聊PT校验工具pt-table-checksum 注意事项: 1. 根据测试,需要一个即能登录主库,也能登录从库的账号: 2. 只能指定一个host,必须为主库的IP: ...
- mysql主从一致性校验工具-pt
一.环境 1.系统环境 系统 IP 主机名 说明 server_id centos6.7 MasterIP master 数据库:主 177 centos6.7 SlaveIP slave 数据库: ...
随机推荐
- 微信小程序底层原理与运行机制类文章学习
参考文档 小程序底层实现原理及一些思考 为了安全和管控, 双线程执行 Web Worker执行用户的代码; UI线程执行大部分的功能. 微信小程序架构原理 只通过mvvm模板语法动态改变页面, 不支持 ...
- linux查看当前目录
查看当前路径命令:pwd pwd命令能够显示当前所处的路径. 这个命令比较简单,如果有时在操作过程中忘记了当前的路径,则可以通过此命令来查看路径,其执行方式为:
- group by用法提示:select涉及字段规则
工资表t_salary如下: id month name salary 1 201601 Jim 12 2 201601 Bruce 30 3 201601 Peter 23 ...
- Flume-Replicating Channel Selector 单数据源多出口
使用 Flume-1 监控文件变动,Flume-1 使用 Replicating Channel Selector 将变动内容传递给 Flume-2,Flume-2 负责存储到 HDFS.同时 Flu ...
- requests和BeautifulSoup模块的使用
用python写爬虫时,有两个很好用第三方模块requests库和beautifulsoup库,简单学习了下模块用法: 1,requests模块 Python标准库中提供了:urllib.urllib ...
- Mac配置jdk以及maven
一 Mac配置JDK和Maven 1.安装成功jdk后 2.打开终端后,输入vim ~/.bash_profile 3.输入: export MAVEN_HOME=/usr/local/maven/a ...
- rally task配置文件
rally task配置文件 Rally本身提供了一些task配置文件,用于提供测试用例中所需的信息包括场景测试中所传入的参数.运行方式是并行还是串行,context等信息.Rally本身提供的tas ...
- 网站title,meta,description如何设置,长度大小多少合适!
转自:http://www.os1010.com/archives/1682 如 何 把 握 html 网 页 中 的 meta 标 签 对于高级的搜索引擎来说,html 的meta 标签并不是什么新 ...
- js 中 new call apply bind JSON.stringify 的原理以及模拟实现
1.new的原理和实现 它创建了一个全新的对象. 它会被执行 [[Prototype]](也就是 __proto__)链接. 它使 this指向新创建的对象. 通过 new创建的每个对象将最终被 [[ ...
- "挡位"还是"档位",究竟谁错了
http://baijiahao.baidu.com/s?id=1581395663965196858&wfr=spider&for=pc 对于“挡”与“档”两个字,我一直并没有给以太 ...