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使用说明(未完待续) 官网
随机推荐
- nginx配置文件nginx.conf 不包括server节点
整理的一个nginx.conf的配置,不包括server节点介绍 原文请查看,Nginx配置文件(nginx.conf)配置详解 # For more information on configura ...
- js拦截全局ajax请求
你是否有过下面的需求:需要给所有ajax请求添加统一签名.需要统计某个接口被请求的次数.需要限制http请求的方法必须为get或post.需要分析别人网络协议等等,那么如何做?想想,如果能够拦截所有a ...
- java的classLoader分析与jettty的WebAppClassLoader
classLoader,从名字就可以知道,用于加载class的东西. 我们知道在Java中,源文件是会被编译成class文件的,我们的程序的运行也是需要依赖这些编译成字节码的class文件,而这些字节 ...
- openerp7 时区问题解决--改成本地时区
由于目前openerp的时区,读取的是UTC时间,而我国本地时间比UTC快8小时 问题就导致,写入数据库的时候时间相差8小时,以及Openerp日志输出时间格式也相差8小时和前端显示问题 1.更改op ...
- 未能找到路径E:\项目文件\W\vbc.exe”的一部分
网上找的说要引用Microsoft.CodeDom.Providers.DotNetCompilerPlatform, 我已经引用了,是差roslyn文件夹,从别的项目考一份过来就好了
- winform窗体 小程序【三级联动】
三级联动[省,市,区] 类似地区选择,当选的某个省份,后面的下拉框相对变成对应省份的区县 实现省市区联动关键是数据库的表,[每个省内区的AreaCode列是同样的] public Form2() { ...
- SQL Server T—SQL 语句【建 增 删 改】(建外键)
一 创建数据库 如果多条语句要一起执行,那么在每条语句之后需要加 go 关键字 建库 : create database 数据库名 create database Dat ...
- [android] 新闻客户端实现左侧导航点击切换
设置主布局文件,为根布局设置一个id,作为内容区 给ListView的条目设置点击事件,setOnItemClickListener()方法,参数:上下文 当前的Fragment实现OnItemCli ...
- mongodb远程连接访问
随着云计算,云服务的不断发展演进,数据库的管理及维护方式也在转变,传统基于C/S客户端工具管理的方式,已经无法满足实际需要. TreeSoft数据库管理系统,采用web方式,对mongoDB,MySQ ...
- Linux中编译安装软件的基本流程
1. 准备软件包源文件 从互联网下载相应的软件包(以 .tar.gz 或 .tar.bz2 为后缀),将tarball文件解压到/usr/local/src目录下,并切换到软件包目录下 : 2. ./ ...