Percona-toolkit工具详解

1. pt工具安装

[root@master ~]# yum install -y  percona-toolkit-3.1.0-2.el7.x86_64.rpm

2. 常用工具使用介绍

2.1 pt-archiver 归档表

# 重要参数--limit 100      每次取100行数据用pt-archive处理    --txn-size  100  设置100行为一个事务提交一次,    --where 'id<3000'  设置操作条件    --progress 5000    每处理5000行输出一次处理信息    --statistics      输出执行过程及最后的操作统计。(只要不加上--quiet,默认情况下pt- archive都会输出执行过程的)    --charset=UTF8    指定字符集为UTF8—这个最后加上不然可能出现乱码。    --bulk-delete      批量删除source上的旧数据(例如每次1000行的批量删除操作)使用案例:1.归档到数据库pt-archiver --source h=10.0.0.11,D=world,t=city,u=root,p=123 --dest h=10.0.0.11,D=world,t=city2,u=root,p=123 --where 'id<1000' --no-check-charset --no-delete --limit=100 --commit-each --progress 200 --statistics2.只清理数据pt-archiver --source h=127.0.0.1,D=world,t=city2,u=root,p=123 --where 'id<100' --purge --limit=1 --no-check-charset3.只把数据导出到外部文件,但是不删除源表里的数据pt-archiver --source h=10.0.0.11,D=world,t=city,u=root,p=123 --where '1=1' --no-check-charset --no-delete --file="/tmp/archiver.dat"

2.2 pt-osc

pt-osc工作流程:1、检查更改表是否有主键或唯一索引,是否有触发器2、检查修改表的表结构,创建一个临时表,在新表上执行ALTER TABLE语句3、在源表上创建三个触发器分别对于INSERT UPDATE DELETE操作4、从源表拷贝数据到临时表,在拷贝过程中,对源表的更新操作会写入到新建表中5、将临时表和源表rename(需要元数据修改锁,需要短时间锁表)6、删除源表和触发器,完成表结构的修改。##=====================================================##pt-osc工具限制1、源表必须有主键或唯一索引,如果没有工具将停止工作2、如果线上的复制环境过滤器操作过于复杂,工具将无法工作3、如果开启复制延迟检查,但主从延迟时,工具将暂停数据拷贝工作4、如果开启主服务器负载检查,但主服务器负载较高时,工具将暂停操作5、当表使用外键时,如果未使用--alter-foreign-keys-method参数,工具将无法执行6、只支持Innodb存储引擎表,且要求服务器上有该表1倍以上的空闲空间。pt-osc之alter语句限制1、不需要包含alter table关键字,可以包含多个修改操作,使用逗号分开,如"drop clolumn c1, add column c2 int"2、不支持rename语句来对表进行重命名操作3、不支持对索引进行重命名操作4、如果删除外键,需要对外键名加下划线,如删除外键fk_uid, 修改语句为"DROP FOREIGN KEY _fk_uid"pt-osc之命令模板## --execute表示执行## --dry-run表示只进行模拟测试## 表名只能使用参数t来设置,没有长参数pt-online-schema-change \--host="127.0.0.1" \--port=3358 \--user="root" \--password="root@root" \--charset="utf8" \--max-lag=10 \--check-salve-lag='xxx.xxx.xxx.xxx' \--recursion-method="hosts" \--check-interval=2 \--database="testdb1" \ t="tb001" \--alter="add column c4 int" \--execute例子:pt-online-schema-change --user=root --password=123 --host=10.0.0.11 --alter "add column age int default 0" D=test,t=t1 --print --execute

2.3 pt-table-checksum

创建数据库Create database pt CHARACTER SET utf8;创建用户checksum并授权GRANT ALL ON *.* TO 'checksum'@'10.0.0.%' IDENTIFIED BY 'checksum';flush privileges;--[no]check-replication-filters:是否检查复制的过滤器,默认是yes,建议启用不检查模式。--databases | -d:指定需要被检查的数据库,多个库之间可以用逗号分隔。--[no]check-binlog-format:是否检查binlog文件的格式,默认值yes。建议开启不检查。因为在默认的row格式下会出错。--replicate`:把checksum的信息写入到指定表中。--replicate-check-only:只显示不同步信息pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=pt.checksums --create-replicate-table --databases=test --tables=t1 h=10.0.0.11,u=checksum,p=checksum,P=3306#!/bin/bashdate >> /root/db/checksum.logpt-table-checksum --nocheck-binlog-format --nocheck-plan--nocheck-replication-filters --replicate=pt.checksums --set-varsinnodb_lock_wait_timeout=120 --databases UAR_STATISTIC -u'checksum' -p'checksum'-h'10.0.0.11' >> /root/db/checksum.logdate >> /root/db/checksum.log

2.4 pt-table-sync

主要参数介绍--replicate :指定通过pt-table-checksum得到的表.--databases:指定执行同步的数据库。--tables :指定执行同步的表,多个用逗号隔开。--sync-to-master :指定一个DSN,即从的IP,他会通过show processlist或show slave status 去自动的找主。h=:服务器地址,命令里有2个ip,第一次出现的是Master的地址,第2次是Slave的地址。u=:帐号。p=:密码。--print :打印,但不执行命令。--execute :执行命令。pt-table-sync--replicate=pt.checksums h=10.0.0.11,u=root,p=123,P=3306--print

2.5 mysql死锁监测

pt-deadlock-logger h='127.0.0.1' --user=root --password=123456

2.6 主键冲突检查

pt-duplicate-key-checker --database=world h='127.0.0.1' --user=root --password=123456

pt-kill 语句

常用参数说明--daemonize  放在后台以守护进程的形式运行;--interval  多久运行一次,单位可以是s,m,h,d等默认是s –不加这个默认是5秒--victims 默认是oldest,只杀最古老的查询。这是防止被查杀是不是真的长时间运行的查询,他们只是长期等待 这种种匹配按时间查询,杀死一个时间最高值。--all 杀掉所有满足的线程--kill-query      只杀掉连接执行的语句,但是线程不会被终止--print              打印满足条件的语句--busy-time 批次查询已运行的时间超过这个时间的线程;--idle-time 杀掉sleep 空闲了多少时间的连接线程,必须在--match-command sleep时才有效—也就是匹配使用 -- –match-command 匹配相关的语句。----ignore-command 忽略相关的匹配。 这两个搭配使用一定是ignore-commandd在前 match-command在后,--match-db cdelzone 匹配哪个库command有:Query、Sleep、Binlog Dump、Connect、Delayed insert、Execute、Fetch、Init DB、Kill、Prepare、Processlist、Quit、Reset stmt、Table Dump例子:---杀掉空闲链接sleep 5秒的 SQL 并把日志放到/home/pt-kill.log文件中/usr/bin/pt-kill  --user=用户名 --password=密码 --match-command Sleep  --idle-time 5 --victim all --interval 5 --kill --daemonize -S /tmp/mysql.sock --pid=/tmp/ptkill.pid --print --log=/tmp/pt-kill.log &---查询SELECT 超过1分钟路/usr/bin/pt-kill --user=用户名 --password=密码 --busy-time 60  --match-info "SELECT|select" --victim all --interval 5 --kill --daemonize -S  -S /tmp/mysql.sock --pid=/tmp/ptkill.pid --print --log=/tmp/pt-kill.log &--- Kill掉 select IFNULl.*语句开头的SQLpt-kill --user=用户名 --password=密码 --victims all --busy-time=0 --match-info="select IFNULl.*" --interval 1 -S /tmp/mysqld.sock --kill --daemonize --pid=/tmp/ptkill.pid --print --log=/tmp/pt-kill.log &----kill掉state Locked/usr/bin/pt-kill --user=用户名 --password=密码  --victims all --match-state='Locked' --victim all --interval 5 --kill --daemonize -S /tmp/mysqld.sock --pid=/tmp/ptkill.pid --print --log=/tmp/pt-kill.log &---kill掉 a库,web为10.0.0.11的链接pt-kill  --user=用户名 --password=密码 --victims all  --match-db='a' --match-host='10.0.0.11' --kill --daemonize --interval 10  -S /tmp/mysqld.sock  --pid=/tmp/ptkill.pid --print-log=/tmp/pt-kill.log &---指定哪个用户killpt-kill  --user=用户名 --password=密码 --victims all --match-user='root' --kill  --daemonize --interval 10 -S /home/zb/data/my6006/socket/mysqld.sock --pid=/tmp/ptkill.pid --print --log=/home/pt-kill.log &---查询SELECT 超过1分钟路pt-kill  --user=用户名 --password=密码 --busy-time 60 --match-info "SELECT|select" --victim all  --interval 5 --kill --daemonize -S /tmp/mysqld.sock --pid=/tmp/ptkill.pid --print --log=/tmp/pt-kill.log &----kill掉 command query | Executept-kill --user=用户名 --password=密码 --victims all  --match-command= "query|Execute" --interval 5 --kill --daemonize -S /tmp/mysqld.sock --pid=/tmp/ptkill.pid --print --log=/home/pt-kill.log &

其他

pt-find---找出几天之前建立的表pt-slave-restart-----主从报错,跳过报错pt-summary---整个系统的的概述pt-mysql-summary---MySQL的表述,包括配置文件的描述pt-duplicate-key-checker---检查数据库重复索引

作者:MySQL_oldguo

链接:https://www.jianshu.com/p/c97228b6f60c

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355

推荐阅读更多精彩内容