1. pt工具安装

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

2. 常用工具使用介绍

2.1 pt-archiver 归档表

1. pt-archive是啥

属于大名鼎鼎的percona工具集的一员,是归档MySQL大表数据的最佳轻量级工具之一。

注意,相当轻,相当方便简单。

2. pt-archive能干啥

a.清理线上过期数据;

b.导出线上数据,到线下数据作处理;

c.清理过期数据,并把数据归档到本地归档表中,或者远端归档服务器。

注意:pt-archiver操作的表必须有主键

# 重要参数

--where 'id<3000'

设置操作条件

--limit 1000

每次取1000行数据给pt-archive处理

--txn-size 1000

设置1000行为一个事务提交一次

--progress 5000

每处理5000行输出一次处理信息

--statistics

结束的时候给出统计信息:开始的时间点,结束的时间点,查询的行数,归档的行数,删除的行数,以及各个阶段消耗的总的时间和比例,便于以此进行优化。只要不加上--quiet,默认情况下pt-archive都会输出执行过程的

--charset=UTF8

指定字符集为UTF8

--no-delete

表示不删除原来的数据,注意:如果不指定此参数,所有处理完成后,都会清理原表中的数据

--bulk-delete

批量删除source上的旧数据

--bulk-insert

批量插入数据到dest主机 (看dest的general log发现它是通过在dest主机上LOAD DATA LOCAL INFILE插入数据的)

--purge

删除source数据库的相关匹配记录

--local

不把optimize或analyze操作写入到binlog里面(防止造成主从延迟巨大)

--analyze=ds

操作结束后,优化表空间(d表示dest,s表示source)
默认情况下,pt-archiver操作结束后,不会对source、dest表执行analyze或optimize操作,因为这种操作费时间,并且需要你提前预估有足够的磁盘空间用于拷贝表。一般建议也是pt-archiver操作结束后,在业务低谷手动执行analyze table用以回收表空间

使用案例:
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 --statistics
2.只清理数据
pt-archiver --source h=127.0.0.1,D=world,t=city2,u=root,p=123 --where 'id<100' --purge --limit=1 --no-check-charset
3.只把数据导出到外部文件,但是不删除源表里的数据
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"
4. 全表归档,不删除原表数据,非批量插入
pt-archiver \
--source h=10.73.129.187,P=3306,u=backup_user,p='xxx',D=test123,t=c1 \
--dest h=10.73.129.188,P=3306,u=backup_user,p='xxx',D=test123,t=c1 \
--charset=UTF8 --where '1=1' --progress 10000 --limit=10000 --txn-size 10000 --statistics --no-delete
5. 全表归档,不删除原表数据,批量插入
pt-archiver \
--source h=10.73.129.187,P=3306,u=backup_user,p='xxx',D=test123,t=c1 \
--dest h=10.73.129.188,P=3306,u=backup_user,p='xxx',D=test123,t=c1 \
--charset=UTF8 --where '1=1' --progress 10000 --limit=10000 --txn-size 10000 --bulk-insert --bulk-delete --statistics --no-delete
6. 全表归档,删除原表数据,非批量插入,非批量删除
pt-archiver \
--source h=10.73.129.187,P=3306,u=backup_user,p='xxx',D=test123,t=c1 \
--dest h=10.73.129.188,P=3306,u=backup_user,p='xxx',D=test123,t=c1 \
--charset=UTF8 --where '1=1' --progress 10000 --limit=10000 --txn-size 10000 --statistics –purge
7. 全表归档,删除原表数据,批量插入,批量删除
pt-archiver \
--source h=10.73.129.187,P=3306,u=backup_user,p='xxx',,D=test123,t=c1 \
--dest h=10.73.129.188,P=3306,u=backup_user,p='xxx',D=test123,t=c1 \
--charset=UTF8 --where '1=1' --progress 10000 --limit=10000 --txn-size 10000 --bulk-insert --bulk-delete --statistics –purge

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=oldguo --password=123 --host=10.0.0.51 --alter "add column state int not null default 1" D=test,t=t100w --print --execute
pt-online-schema-change --user=oldguo --password=123 --host=10.0.0.51 --alter "add index idx(num)" D=test,t=t100w --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/bash
date >> /root/db/checksum.log
pt-table-checksum --nocheck-binlog-format --nocheck-plan
--nocheck-replication-filters --replicate=pt.checksums --set-vars
innodb_lock_wait_timeout=120 --databases UAR_STATISTIC -u'checksum' -p'checksum'
-h'10.0.0.11' >> /root/db/checksum.log
date >> /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 --databases test  --tables t1 h=10.0.0.51,u=checksum,p=checksum,P=3307 h=10.0.0.51,u=checksum,p=checksum,P=3306 --printpt-table-sync --replicate=pt.checksums --databases test  --tables t1 h=10.0.0.51,u=checksum,p=checksum,P=3307 h=10.0.0.51,u=checksum,p=checksum,P=3307 --execute

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

2.7 pt-show-grants

作用:  用户和权限信息迁移。
pt-show-grants -h10.0.0.51  -P3307  -uchecksum -pchecksum -- Grants dumped by pt-show-grants
-- Dumped from server 10.0.0.51 via TCP/IP, MySQL 5.7.28-log at 2020-05-15 17:11:06
-- Grants for 'checksum'@'10.0.0.%'
CREATE USER IF NOT EXISTS 'checksum'@'10.0.0.%';
ALTER USER 'checksum'@'10.0.0.%' IDENTIFIED WITH 'mysql_native_password' AS '*E5E390AF1BDF241B51D9C0DBBEA262CC9407A2DF' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK;
GRANT ALL PRIVILEGES ON *.* TO 'checksum'@'10.0.0.%';
-- Grants for 'mysql.session'@'localhost'
CREATE USER IF NOT EXISTS 'mysql.session'@'localhost';
ALTER USER 'mysql.session'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT LOCK;
GRANT SELECT ON `mysql`.`user` TO 'mysql.session'@'localhost';
GRANT SELECT ON `performance_schema`.* TO 'mysql.session'@'localhost';
GRANT SUPER ON *.* TO 'mysql.session'@'localhost';
-- Grants for 'mysql.sys'@'localhost'
CREATE USER IF NOT EXISTS 'mysql.sys'@'localhost';
ALTER USER 'mysql.sys'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT LOCK;
GRANT SELECT ON `sys`.`sys_config` TO 'mysql.sys'@'localhost';
GRANT TRIGGER ON `sys`.* TO 'mysql.sys'@'localhost';
GRANT USAGE ON *.* TO 'mysql.sys'@'localhost';
-- Grants for 'repl'@'10.0.0.%'
CREATE USER IF NOT EXISTS 'repl'@'10.0.0.%';
ALTER USER 'repl'@'10.0.0.%' IDENTIFIED WITH 'mysql_native_password' AS '*23AE809DDACAF96AF0FD78ED04B6A265E05AA257' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK;
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.0.0.%';
-- Grants for 'root'@'10.0.0.%'
CREATE USER IF NOT EXISTS 'root'@'10.0.0.%';
ALTER USER 'root'@'10.0.0.%' IDENTIFIED WITH 'mysql_native_password' AS '*23AE809DDACAF96AF0FD78ED04B6A265E05AA257' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.0.0.%';
-- Grants for 'root'@'localhost'
CREATE USER IF NOT EXISTS 'root'@'localhost';
ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*23AE809DDACAF96AF0FD78ED04B6A265E05AA257' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION;

3. 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 &

4. 其他

pt-find ---找出几天之前建立的表

pt-slave-restart -----主从报错,跳过报错

pt-summary ---整个系统的的概述

pt-mysql-summary ---MySQL的表述,包括配置文件的描述

pt-duplicate-key-checker ---检查数据库重复索引

Percona-toolkit工具详解相关推荐

  1. pt mysql_pt(Percona Toolkit)工具详解:(二)工具介绍

    之所以先写介绍,那是因为太多工具,要查起来非常麻烦,要先做个汇总介绍,方便查找. 介绍 1.找出重复的索引和外键 pt-duplicate-key-checker 这个工具会将重复的索引和外键都列出来 ...

  2. centos rpm 安装 perl_XtraBackup工具详解 Part 2 xtrabackup安装

    实验环境 此次实验的环境如下 MySQL 5.7.25 Redhat 6.10 1. xtrabackup版本 我们在官方网站可以看到xtrabackup有多个版本 https://www.perco ...

  3. JDK自带JVM分析工具详解

    JDK自带JVM分析工具详解 1. JVM分析工具概述 1.1 JVM分析工具简介 1.2 JVM分析工具分类 2. JVM分析工具详解 2.1 idea环境配置 2.2 jps 2.3 jinfo ...

  4. rpm包安装和卸载,rpm查询,yum工具详解,yum仓库搭建

    rpm包安装和卸载 [root@binbinlinux Packages]# rpm -ivh zip-3.0-1.el6.x86_64.rpm    安装rpm包命令   ivh I=安装的意思in ...

  5. Chrome开发者工具详解(4)-Profiles面板

    Chrome开发者工具详解(4)-Profiles面板 如果上篇中的Timeline面板所提供的信息不能满足你的要求,你可以使用Profiles面板,利用这个面板你可以追踪网页程序的内存泄漏问题,进一 ...

  6. parted工具详解

    通常我们用的比较多的一般都是fdisk工具来进行分区,但是现在由于磁盘越来越廉价,而且磁盘空间越来越大:而fdisk工具他对分区是有大小限制的,它只能划分小于2T的磁盘.但是现在的磁盘空间很多都已经是 ...

  7. Java定时任务调度工具详解之Timer篇

    Java定时任务调度工具详解之Timer篇 https://segmentfault.com/a/1190000009542398

  8. python数值转换机_用于ETL的Python数据转换工具详解

    ETL的考虑 做 数据仓库系统,ETL是关键的一环.说大了,ETL是数据整合解决方案,说小了,就是倒数据的工具.回忆一下工作这么些年来,处理数据迁移.转换的工作倒 还真的不少.但是那些工作基本上是一次 ...

  9. Java定时任务工具详解之Timer篇

    Java定时任务调度工具详解 什么是定时任务调度? ◆ 基于给定的时间点,给定的时间间隔或者给定的执行次数自动执行的任务. 在Java中的定时调度工具? ◆ Timer ◆Quartz Timer和Q ...

  10. PS调整边缘工具详解

    转载地址 : http://www.360doc.com/content/15/1129/12/4127803_516682427.shtml *"调整边缘"工具详解 (ps教程) ...

最新文章

  1. mysql for Mac 下创建数据表中文显示为?的解决方法
  2. for语句之打印三角形问题
  3. sql group by having用法_神奇的 SQL 为什么 GROUP BY 之后不能直接引用原表中的列?...
  4. [蓝桥杯][算法提高VIP]分分钟的碎碎念(dfs)
  5. 数据结构学习笔记(六)链表算法题
  6. 计算机辅助设计源程序,计算机辅助设计(插值法程序).doc
  7. 抢红包概率是随机的吗_顺丰发5亿红包给员工:管理学的随机奖励还能这么玩...
  8. HashMap源码分析(转载)
  9. python计算2的20次方_Python学习二运算符
  10. web1:http协议简介和用netassist和py程序当http服务器
  11. windows 界面设计规则与规范
  12. 颜色空间转换-从RGB到LCH-亮度饱和度色度
  13. 微信小程序 弹出确定取消框
  14. php 设置字符编码为utf-8
  15. 为什么word文档或EXCET表格从电脑传到手机上格式就变了
  16. QTcpSocket客户端和服务端发送图片(或大文件)小Demo
  17. VuePress + GitHub Pages 生成静态网站
  18. java string 去掉某个字符_JAVA String 如何去掉指定字符
  19. 【蓝桥杯集训100题】scratch绘制蜘蛛网 蓝桥杯scratch比赛专项预测编程题 模拟练习题第05题
  20. 2022年度技术总结

热门文章

  1. Windows server 2012 R2系统怎么安装IIS管理器?
  2. 数据库是什么?数据库的概念
  3. finalize()用法
  4. 网络技术这十个术语你知道吗?
  5. 一些常见网络安全术语
  6. SpringBoot整合redis使用setnx完成分布式锁
  7. 多用途DF无线数据收发模块
  8. Java项目:(小程序)物业管理系统(spring+spring mvc+mybatis+layui+微信小程)
  9. 方向余弦矩阵DCM刚体的矢量—矩阵描述
  10. Linux学习:Linux启动管理器GRUB2