mysql瑞士军刀–pt工具
Percona-Toolkits
- Percona-toolkit 简介
percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql任务和系统任务,这些任务包括:
检查master和slave数据的一致性
有效地对记录进行归档
查找重复的索引
对服务器信息进行汇总
分析来自日志和tcpdump的查询
当系统出问题的时候收集重要的系统信息
根据工具类型划分:开发、性能、配置、监控、复制、系统、实用 这7种类型。
可谓是 mysql 的 瑞士军刀~~
二.percona-toolkit的使用
(一). 开发类工具
- pt-duplicate-key-checker
功能:
检查mysql中 冗余的索引。
用法:
pt-duplicate-key-checker –user=root –password=xxxx –host=localhost –socket=/tmp/mysql.sock
- pt-online-schema-change
功能:
不锁表的情况下,修改表结构.
实现原理:
创建一个和你要执行alter操作的表一样的空表结构,执行表结构修改,然后从原表中copy原始数据到表结构修改后的表,当数据copy完成以后就会将原表移走,用新表代替原表,默认动作是将原表drop掉。在copy数据的过程中,任何在原表的更新操作都会更新到新表,因为这个工具在会在原表上创建触发器,触发器会将在原表上更新的内容更新到新表。
用法:
添加索引
pt-online-schema-change -u root -h 10.250.7.50 -p yang –critical-load=”Threads_running=200″ –alter=’add key indx_vid(vid) ‘ –execute D=houyi,t=ga
删除字段
pt-online-schema-change -u root -h 10.250.7.50 -p yang –alter=’drop column vid ‘ –execute D=houyi,t=ga
远程加索引
pt-online-schema-change -usjh -P3306 -h192.168.11.70 -psjh –alter=’add key idx_c1_c2(c1,c2)’ –execute D=sjh,t=yw
3. pt-show-grants
功能:导出mysql.user权限。
工具执行流程:
1、先查找所有用户和Host
2、然后逐个执行show grants
用法:
pt-show-grants -u pt -p 213456 -S /tmp/mysql.sock
打印:
— Grants dumped by pt-show-grants
— Dumped from server Localhost via UNIX socket, MySQL 5.5.36-MariaDB-log at 2015-07-10 13:26:17
— Grants for ‘canal’@’192.168.%’
GRANT REPLICATION CLIENT, REPLICATION SLAVE, SELECT ON *.* TO ‘canal’@’192.168.%’ IDENTIFIED BY PASSWORD ‘*219FB8C1D88632A46DF3F9C8039A14BB75051ECF';
— Grants for ‘hc_newRO’@’192.168.1.28′
GRANT USAGE ON *.* TO ‘hc_newRO’@’192.168.1.28′ IDENTIFIED BY PASSWORD ‘*8A66FB579D98E9605C30D86CEF69B569251E5F08′;
GRANT SELECT ON `voice`.* TO ‘hc_newRO’@’192.168.1.28′;
- pt-upgrade
功能:
在多台服务器上执行查询,并比较有什么不同!这在升级服务器的时候非常有用,可以先安装并导数据到新的服务器上,然后使用这个工具跑一下sql看看有什么不同,可以找出不同版本之间的差异。
用法:
只查看某个sql在两个服务器的运行结果范例:
pt-upgrade h=’localhost’ h=192.168.8.92 –user=root –password=zhang@123 –query=”select * from user_data.collect_data limit 5″
查看文件中的对应sql在两个服务器的运行结果范例:
pt-upgrade h=’localhost’ h=192.168.8.92 –user=root –password=zhang@123 aaa.sql
查看慢查询中的对应的查询SQL在两个服务器的运行结果范例:
pt-upgrade h=’localhost’ h=192.168.8.92 –user=root –password=zhang@123 slow.log
此外还可以执行compare的类型,主要包含三个query_times,results,warnings,比如下面的例子,只比较sql的执行时间
pt-upgrade h=192.168.3.91 h=192.168.8.92 –user=root –password=zhang@123 –query=”select * from user_data.collect_data” –compare query_times
(二) 性能类工具
- pt-index-usage
功能:
从log文件中读取插叙语句,并用explain分析他们是如何利用索引。完成分析之后会生成一份关于索引没有被查询使用过的报告。
用法:
从满查询中的sql查看索引使用情况范例:
pt-index-usage /data/dbdata/localhost-slow.log –host=localhost –user=root –password=root
将分析结果保存到数据库范例:
pt-index-usage /data/dbdata/localhost-slow.log –host=localhost –user=root –password=zhang@123 –no-report –create-save-results-database
- pt-pmp
功能:
为查询程序执行聚合的GDB堆栈跟踪,先进性堆栈跟踪,然后将跟踪信息汇总。
用法:
pt-pmp -p 21933
pt-pmp -b /usr/local/mysql/bin/mysqld_safe
- pt-visual-explain
功能:
格式化explain出来的执行计划按照tree方式输出,方便阅读.
用法:
mysql -uroot -pzhang@123 -e “explain select email from test.collect_data where id=101992419″ |pt-visual-explain
(三) 配置类工具
- pt-config-diff
功能:
对比配置文件中不一致的地方。
用法:
pt-config-diff h=192.168.8.85 h=192.168.8.22 -uwwg -pwwg
8 config differences
Variable dev-bbs-db-8-85.sh.hupu.com soccer-web-8-22-dev.sh.h
========================= ========================= =========================
back_log 4000 50
basedir /usr/local/webserver/D… /usr/local/mysql
big_tables ON OFF
binlog_format ROW MIXED
bulk_insert_buffer_size 67108864 33554432
datadir /data/db-data/hupu.com… /data/mysql/mysql_3306…
expire_logs_days 60 10
general_log ON OFF
- pt-mysql-summary
功能:
精细地对mysql的配置和sataus信息进行汇总。
用法:
pt-mysql-summary — –user=root –password=root –host=localhost
3. pt-variable-advisor
功能:
分析mysql的参数变量,并可能对问题参数提出建议。
用法:
pt-variable-advisor –user=root –password=root localhost
(四) 监控类工具
- pt-deadlock-logger
功能:
打印死锁信息。
核心参数 :
–daemonize : 守护进程
–create-dest-table :创建指定的表。
–dest :创建存储死锁信息的表。
–database :-D,指定链接的数据库。
–table :-t,指定存储的表名。
–log :指定死锁日志信息写入到文件。
–run-time :运行次数,默认永久
–interval :运行间隔时间,默认30s。
u,p,h,P :链接数据库的信息。
用法:
把本地死锁信息永久保存在 远端 test.deadlock222的表里
pt-deadlock-logger –user=wwg –password=wwg –host=192.168.8.22 –interval=3 –create-dest-table –dest u=wwg,p=wwg,h=192.168.8.85,D=test,t=deadlock222
(root@localhost)[test]> select * from deadlock222;
+————–+———————+——–+——–+———-+——+———–+—-+—–+——-+—————–+———–+———–+———–+——–+———————————————–+
| server | ts | thread | txn_id | txn_time | user | hostname | ip | db | tbl | idx | lock_type | lock_mode | wait_hold | victim | query |
+————–+———————+——–+——–+———-+——+———–+—-+—–+——-+—————–+———–+———–+———–+——–+———————————————–+
| 192.168.8.22 | 2015-07-10 15:18:30 | 38 | 0 | 25 | root | localhost | | wwg | test3 | GEN_CLUST_INDEX | RECORD | X | w | 1 | update test3 set name=’helloworld’ where id>1 |
| 192.168.8.22 | 2015-07-10 15:18:30 | 39 | 0 | 11 | root | localhost | | wwg | test3 | GEN_CLUST_INDEX | RECORD | X | w | 0 | update test3 set name=’www’ where id>1 |
+————–+———————+——–+——–+———-+——+———–+—-+—–+——-+—————–+———–+———–+———–+——–+———————————————–+
直接打印:
[root@soccer-web-8-22-dev ~]# pt-deadlock-logger -uroot -proot -hlocalhost
server ts thread txn_id txn_time user hostname ip db tbl idx lock_type lock_mode wait_hold victim query
localhost 2015-07-10T15:18:30 38 0 25 root localhost wwg test3 GEN_CLUST_INDEX RECORD X w 1 update test3 set name=’helloworld’ where id>1
localhost 2015-07-10T15:18:30 39 0 11 root localhost wwg test3 GEN_CLUST_INDEX RECORD X w 0 update test3 set name=’www’ where id>1
- pt-fk-error-logger
功能:
提取和记录mysql外键错误信息。
用法:
pt-fk-error-logger –user=root –password=’root’ h=192.168.1.248 –dest D=test,t=foreign_key_errors
写到远端:
pt-fk-error-logger –user=root –password=’root’ h=192.168.1.248 –dest D=test,t=foreign_key_errors –user=root –password=root –host=192.168.1.249
- pt-mext
功能:
并行查看SHOW GLOBAL STATUS的多个样本的信息。
用法:
每隔10s执行一次SHOW GLOBAL STATUS,并将结果合并到一起查看
pt-mext -r — mysqladmin -uroot -p’root’ –socket=/tmp/mysql.sock ext -i10 -c2
-i sleep
-c 迭代多少次
- pt-query-digest
功能:
分析查询执行日志,并产生一个查询报告,为MySQL、PostgreSQL、 memcached过滤、重放或者转换语句。
用法:
- 分析本地的慢查询文件
pt-query-digest –user=root –password=zhang@123 /data/dbdata/localhost-slow.log
- 重新回顾满查询日志,并将结果保存到query_review中,注意query_review表的表结构必须先建好,表结构如下:
CREATE TABLE query_review ( checksum BIGINT UNSIGNED NOT NULL PRIMARY KEY, fingerprint TEXT NOT NULL, sample TEXT NOT NULL, first_seen DATETIME, last_seen DATETIME, reviewed_by VARCHAR(20), reviewed_on DATETIME, comments TEXT );
从远端抓取slowlog
pt-query-digest –user=root –password=zhang@123 –review h=localhost,D=test,t=query_review /data/dbdata/localhost-slow.log
(五) 复制类工具
- pt-heartbeat
用法:
pt-heartbeat [OPTION…] [DSN] –update|–monitor|–check|–stop
主库上起个守护进程
pt-heartbeat -D test –update –user=root –password=zhang@123 -h192.168.8.22 –create-table –daemonize
从库监控延迟(实时监控)
pt-heartbeat -D test –monitor –user=wwg –password=wwg -h192.168.8.22 –master-server-id=203306
0.00s [ 0.00s, 0.00s, 0.00s ]
0.00s [ 0.00s, 0.00s, 0.00s ]
0.00s [ 0.00s, 0.00s, 0.00s ]
0.00s [ 0.00s, 0.00s, 0.00s ]
0.00s [ 0.00s, 0.00s, 0.00s ]
0.00s [ 0.00s, 0.00s, 0.00s ]
只监控一次就退出
pt-heartbeat -D test –check –user=root –password=zhang@123 -h192.168.8.22 –master-server-id=203306
- pt-slave-delay
功能:
设置从服务器落后于主服务器指定时间。
用法:
使从落后主1分钟,并每隔15秒钟检测一次,运行10分钟(不加 run-time 会永久执行)
pt-slave-delay –daemonize –user=root –password=root –delay 1m –interval 15s –run-time 10m –host=192.168.3.92
- pt-slave-find
功能:
查找和打印mysql所有从服务器复制层级关系
用法:
查找主库为192.168.8.22 所有从库
pt-slave-find –user=wwg –password=wwg –host=192.168.8.22
- pt-slave-restart
功能:
监视mysql复制错误,并尝试重启mysql复制当复制停止的时候。
用法:
跳过错误数:
pt-slave-restart –user=root –password=zhang@123 –host=192.168.3.92 –skip-count=1
跳过错误类型:
pt-slave-restart –user=root –password=zhang@123 –host=192.168.3.92 –error-numbers=1062
- pt-table-checksum
功能:
检查mysql复制一致性
核心参数:
–no-check-binlog-format 如果不是row格式 都要带上
–replicate-check-only 只显示问题的表
用法:
主库上执行:
pt-table-checksum –nocheck-replication-filters –no-check-binlog-format –replicate=sjh.checksums –create-replicate-table -h192.168.1.134 -P 3306 -u wwg -p wwg –recursion-method=”processlist”
TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE
07-26T21:23:38 0 3 700000 6 0 3.320 wubx.t5
如果数据是一致的DIFFS是等于0的,不等于0表示不一致的。
执行结果显示参数意义:
TS :完成检查的时间。
ERRORS :检查时候发生错误和警告的数量。
DIFFS :0表示一致,大于0表示不致。当指定–no-replicate-check时,会一直为0,当指定
–replicate-check-only会显示不同的信息。
ROWS :表的行数。
CHUNKS :被划分到表中的块的数目。
SKIPPED :由于错误或警告或过大,则跳过块的数目。
TIME :执行的时间。
TABLE :被检查的表名。
- pt-table-sync
功能:
高效同步mysql表的数据
用法:
1.打印 ip 为主库ip
pt-table-sync –replicate=sjh.checksums –print –databases=hc_webgame –charset=utf8 h=192.168.1.134,u=wwg,p=wwg
2.执行
pt-table-sync –replicate=sjh.checksums –execute –databases=hc_webgame –charset=utf8 h=192.168.1.134,u=wwg,p=wwg
(六) 系统类工具
- pt-diskstats
功能:
查看服务器的IO。
用法:
pt-diskstats –interval=5 –show-timestamps –columns-regex=sdb
- pt-fifo-split
功能:
可以模拟切割文件,并通过管道传递给先入先出队列而不用真正的切割文件。
用法:
一个每次读取一百万行,指定fifo文件为/tmp/my-fifo,并使用load data命令导入到mysql中。
pt-fifo-split infile.txt –fifo /tmp/my-fifo –lines 1000000 while [ -e /tmp/my-fifo ]; do mysql -e “set foreign_key_checks=0; set sql_log_bin=0; set unique_checks=0; load data local infile ‘/tmp/my-fifo’ into table load_test fields terminated by ‘\t’ lines terminated by ‘\n’ (col1, col2);” sleep 1; done
- pt-summary
功能:
友好地收集和显示系统信息概况
用法:
pt-summary
4.pt-stalk
功能:
在MySQL服务器出现短暂(5~30秒)的性能波动的时候,一般的性能监控工具都很难抓住故障现场,也就很难收集对应较细粒度的诊断信息。另外,如果这种波动出现的频率很低,例如几天才一次,我们也很难人为的抓住现场,收集数据。这正是pt-stalk所解决的问题。
用法:
pt-stalk –collect-tcpdump –function status –variable Threads_connected –threshold 2 –daemonize — –user=root –password=’root’
查看日志(或 –log 指定日志输出):
tail -f /var/log/pt-stalk.log
查看生成的信息( –dest 指定目录):
ls /var/lib/pt-stalk/
=== pt-stalk的触发条件
三种触发条件,通过参数function设置:
status
–function status –variable Threads_connected –threshold 2500,表示MySQL状态值Threads_connected超过2500时触发数据收集。常用的触发条件还可以使用Threads_running等。
processlist
–function processlist –variable State –match statistics –threshold 10,表示,show processlist中State列的值为statistics的线程数超过10则触发收集。
自定义脚本
包含 trg_plugin函数的shell脚本, trg_plugin 函数必须返回一个int值,比如下面的脚本,因为slow log的status是一个累加值,不能分析差值,因此写小脚本来获取差值,对slow突然出现的尖刺进行分析。
====其他有用的参数:
–iterations:该参数指定pt-stalk在收集几次故障现场后就退出。默认pt-stalk会一直运行
–run-time:触发收集后,该参数指定收集多长时间的数据。默认是30秒
–sleep:为防止一直触发收集数据,该参数指定在某次触发后,必须sleep一段时候才继续观察并触发收集。默认是300秒
–interval:默认情况pt-stalk会每隔一秒检查一次状态数据,判断是否需要触发收集。该参数指定间隔时间,默认是1秒。
–cycles:默认情况pt-stalk只有连续观察到五次状态值满足触发条件时,才触发收集。该参数控制,需要连续几次满足条件,收集被触发,默认是5次。
pt-sift 打印 pt-stalk输出的文件
- pt-ioprofile
功能:
对某个pid附加一个strace进程进行io分析。
用法:
pt-ioprofile –profile-pid=22544 –cell=sizes
先用 iotop -o 排查 什么进程 占用io 更高。
再用 pt-ioprofile 查看 pid 哪些 所属的文件 读写更 频繁。
(七) 实用类工具
- pt-archiver
功能:
将mysql数据库中表的记录归档到另外一个表或者文件,也可以直接进行记录的删除操作。
用法:
- 每5000条 删除1次,每隔2000行输出一次 数据(基本不会照成延迟)
pt-archiver –source D=ibilling_pay_hupu,t=purchase_order –user=root –password=’root’ -S /tmp/mysql.sock –where “create_datetime<=’2015-06-20 00:00:00′” –purge –limit=5000 –progress 2000 –why-quit –no-check-charset > /opt/1.log
- 用于把数据导出文件,不用删除原表中数据
pt-archiver –source h=127.0.0.1,P=58886,D=test,t=t_info_refresh –no-check-charset –where ‘id>1′ –progress 4000 –no-delete –file “/tmp/pt-archiver.sql” –limit=10000
- 把数据归档至 归档库(默认保留最后条)。
pt-archiver –source P=3306,D=wwg,t=yw –user=root –password=root -S /tmp/mysql.sock –dest h=192.168.8.85,P=3306,u=wwg,p=wwg,D=ibilling,t=his_yw –no-check-charset –where ‘id < 5001′ –no-delete –statistics
- pt-find
功能:
查找mysql表并执行指定的命令。
用法:
1.查找192.168.8.22中1天以前创建的InnoDB的表 ,并打印
pt-find –ctime +1 –host=localhost –engine InnoDB –user=root –password=root
`test`.`deadlocks`
`wwg`.`test3`
`wwg`.`wwg_t1`
2.查找192.168.8.22中1天以前更改过的数据库名字匹配%mysql%的并且引擎为MYISAM的表,并将表的引擎更改为InnoDB引擎。
pt-find –mtime +1 –dblike mysql –engine MyISAM –host=localhost –user=root –password=root –exec “ALTER TABLE %D.%N ENGINE=InnoDB”
3.查找192.168.8.22中wwg库和zhang库中的空表,并删除。
pt-find –empty wwg zhang –host=192.168.3.135 –user=root –password=zhang@123 –exec-plus “DROP TABLE %s”;
4.查找192.168.8.22中超过10G的表:
pt-find –tablesize +10G –host=192.168.3.135 –user=root –password=zhang@123
- pt-kill
功能:
找出匹配条件 myql 语句 kill掉。
核心参数:
–victims all 配置所有连接,默认是一个
–interval 30 默认每30秒循环执行一次,可以根据实际情况调整,如果不加,只执行一次;加上的话,会在后台不停的执行。
默认会过滤掉复制线程,请不必担心杀掉复制线程。
–busy-time 批次查询已运行的时间超过这个时间的线程;
–idle-time 杀掉sleep 了多少时间的连接线程,必须在–match-command sleep时才有效
–match-state 匹配状态
Locked
login
copy to tmp table
Copying to tmp table
Copying to tmp table on disk
Creating tmp table
executing
Reading from net
Sending data
Sorting for order
Sorting result
Table lock
Updating
等待
–kill 杀掉连接并且退出
–kill-query 只杀掉连接执行的语句,但是线程不会被终止
–print 打印满足条件的语句
mysql瑞士军刀–pt工具的更多相关文章
- mysql 案例 ~ pt校验工具介绍
简介:今天咱们来聊聊PT校验工具pt-table-checksum 注意事项: 1. 根据测试,需要一个即能登录主库,也能登录从库的账号: 2. 只能指定一个host,必须为主库的IP: ...
- 快速安装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的mysqldump工具的基本用法
导出要用到MySQL的mysqldump工具,基本用法是: shell> mysqldump [OPTIONS] database [tables] 如果你不给定任何表,整个数据库将 ...
- 用批处理启动MySQL命令行工具
最近在看MySQL,安装好之后,每次在开始菜单去启动MySQL命令行工具的时候,都是直接用root用户连接我本地的数据库 输入密码开始工作,但是要连接服务器上的MySQL的话,就要去CMD下运行 : ...
- mysql命令行工具
mysql包相关命令行工具 [root@manage ~]# rpm -qa|grep mysql mysql-server-5.1.73-5.el6_7.1.x86_64 mysql-5.1.73- ...
- Mysql自动备份工具1.0(2013年11月15日更新)
Mysql自动备份工具1.0 下载地址 2013-11-15 1.解决日历控件在Windows7/8/8.1环境下遮挡按钮问题:2.解决按月备份当月没有该日期问题: 2013-11-13 1.Mysq ...
- [资料收集]MySQL在线DDL工具pt-online-schema-change
MySQL在线DDL工具pt-online-schema-change pt-online-schema-change使用说明(未完待续) 官网
随机推荐
- Tomcat学习总结(5)——Tomcat容器管理安全的几种验证方式
当访问服务器中受保护的资源时,容器管理的验证方法可以控制确认用户身份的方式.Tomcat支持四种容器管理的安全防护,它们是: BASIC (基本验证):通过HTTP验证,需要提供base64编码文本的 ...
- Spring中使用变量${}的方式进行参数配置
在使用Spring时,有些情况下,在配置文件中,需要使用变量的方式来配置bean相关属性信息,比如下面的数据库的连接使用了${}的方式进行配置,如下所示: <bean id="data ...
- 读jQuery源码释疑笔记
本释疑笔记是针对自己在看源码的过程中遇到的一些问题的解答,对大众可能不具有参考性,不过可以看看有没有你也不懂得地方,相互学习,相互进步. 1.each的用法 之前对each的用法一直迷迷糊糊,这次终 ...
- POJ 2349 Arctic Network(最小生成树中第s大的边)
题目链接:http://poj.org/problem?id=2349 Description The Department of National Defence (DND) wishes to c ...
- @Styles的nameSpace是什么
先参考下面一篇<创建第一个MVC应用程序> http://www.cnblogs.com/insus/p/3358560.html,Insus.NET创建了一个空的MVC应用程序. 在创建 ...
- C#中利用LightningChart绘制曲线图表
最近在做一个“基于C#语言的电炉温控制软件设计”的设计,我在大学并不是专业学习C#语言编程的,对C#的学习研究完全是处于兴趣,所以编程技术也不是很厉害,遇到问题多参照网络上的开源码. 这不,在做这个课 ...
- Spring MVC 不能正常获取参数的值
最近在开发时遇到一个非常奇怪的问题,在tomcat8中使用Spring MVC框架,在Controller中的方法参数无法正常获取到相应的值,将tomcat版本换成7.0就解决了. 记录以下解决过程, ...
- 码云创建maven工程
码云创建maven工程步骤 1.现在码云上创建工程2.拉取到本地3.使用"touch .gitignore"命令创建.gitignore文件4.在文件中添加过滤文件: .setti ...
- php根据命令行参数生成配置文件
像npm, composer等工具,在开始使用的使用,都需要初始化项目,生成一个项目的配置文件.这种功能的原理是怎么实现的呢? 比如: D:\>npm init --yes Wrote to D ...
- js之展开收缩菜单,用到window.onload ,onclick,
目标效果:点击标签1,如果列表标签的style的display是block,改成none,否则改成block,来达到展开收缩菜单效果 一.准备阶段 html文件 <!DOCTYPE html&g ...