PERCONA-TOOLKIT 安装 使用
PERCONA-TOOLKIT 安装 使用
官网:https://www.percona.com/downloads/percona-toolkit/LATEST/
percona-toolkit是一组高级命令行工具的集合,可以查看当前服务的摘要信息,磁盘检测,分析慢查询日志,查找重复索引,实现表同步等等。
这个工具套件对DBA及运维人员着实不可多得
Server 192.168.88.8 主
Server 192.168.88.17 从
配置主从
主:
yum -y install mariadb mariadb-server
systemctl start mariadb
vim /etc/my.cnf
systemctl restart mariadb
mysql
从:
yum -y install mariadb mariadb-server
systemctl start mariadb
vim /etc/my.cnf
mysql
安装percona-toolkit(主库,从库都安装)
官网:https://www.percona.com/downloads/percona-toolkit/LATEST/
percona-toolkit是一组高级命令行工具的集合,可以查看当前服务的摘要信息,磁盘检测,分析慢查询日志,查找重复索引,实现表同步等等。
这个工具套件对DBA及运维人员着实不可多得
下载:
wget https://www.percona.com/downloads/percona-toolkit/3.1.0/binary/redhat/7/x86_64/percona-toolkit-3.1.0-2.el7.x86_64.rpm
yum install -y percona-toolkit-3.1.0-2.el7.x86_64.rpm
pt(tab)
命令详解
pt-upgrade
#该命令主要用于对比不同mysql版本下SQL执行的差异,通常用于升级前进行对比。
#会生成SQL文件或单独的SQL语句在每个服务器上执行的结果、错误和警告信息等。
pt-online-schema-change
#功能为支持在线变更表构,且不锁定原表,不阻塞原表的DML操作。
#该特性与Oracle的dbms_redefinition在线重定义表原理基本类似。
pt-mysql-summary
#对连接的mysql服务器生成一份详细的配置情况以及sataus信息
#在尾部也提供当前实例的的配置文件的信息
pt-mext
#并行查看SHOW GLOBAL STATUS的多个样本的信息。
#pt-mext会执行你指定的COMMAND,并每次读取一行结果,把空行分割的内容保存到一个一个的临时文件中,最后结合这些临时文件并行查看结果。
pt-kill
#Kill掉符合指定条件mysql语句
pt-ioprofile
#pt-ioprofile的原理是对某个pid附加一个strace进程进行IO分析
pt-fingerprint
#用于生成查询指纹。主要将将sql查询生成queryID,pt-query-digest中的ID即是通过此工具来完成的。
#类似于Oracle中的SQL_ID,涉及绑定变量,字面量等
pt-find
#用与查找mysql表并执行指定的命令,类似于find命令
pt-fifo-split
#模拟切割文件并通过管道传递给先入先出队列而不用真正的切割文件
pt-deadlock-logger
#用于监控mysql服务器上死锁并输出到日志文件,日志包含发生死锁的时间、死锁线程id、死锁的事务id、发生死锁时事务执行时间等详细信息。
pt-archiver
#将mysql数据库中表的记录归档到另外一个表或者文件
#该工具具只是归档旧的数据,对线上数据的OLTP查询几乎没有影响。
#可以将数据插入另外一台服务器的其他表中,也可以写入到一个文件中,方便使用load data infile命令导入数据。
pt-agent
#基于Percona Cloud的一个客户端代理工具
pt-visual-explain
#用于格式化explain的输出
pt-variable-advisor
#用于分析mysql系统变量可能存在的一些问题,可以据此评估有关参数的设置正确与否。
pt-stalk
#用于收集mysql数据库故障时的相关信息便于后续诊断处理。
pt-slave-delay
#用于设定从服务器落后于主服务器的时间间隔。
#该命令行通过启动和停止复制sql线程来设置从落后于主指定时间。
pt-sift
#用于浏览pt-stalk生成的文件。
pt-show-grants
#将当前实例的用户权限全部输出,可以用于迁移数据库过程中重建用户。
pt-query-digest
#用于分析mysql服务器的慢查询日志,并格式化输出以便于查看和分析。
pt-pmp
#为查询程序执行聚合的GDB堆栈跟踪,先进性堆栈跟踪,然后将跟踪信息汇总。
pt-index-usage
#从log文件中读取查询语句,并用分析当前索引如何被使用。
#完成分析之后会生成一份关于索引没有被查询使用过的报告,可以用于分析报告考虑剔除无用的索引。
pt-heartbeat
#用于监控mysql复制架构的延迟。
#主要是通过在主库上的–update线程持续更新指定表上的一个时间戳,从库上–monitor线程或者–check线程检查主库更新的时间戳并与当前系统时间对比,得到延迟值。
pt-fk-error-logger
#将外键相关的错误信息记录到日志或表。
pt-duplicate-key-checker
#功能为从mysql表中找出重复的索引和外键,这个工具会将重复的索引和外键都列出来
#同时也可以生成相应的drop index的语句
pt-diskstats
#类似于iostat,打印磁盘io统计信息,但是这个工具是交互式并且比iostat更详细。可以分析从远程机器收集的数据。
pt-config-diff
#用于比较mysql配置文件和服务器变量
#至少2个配置源需要指定,可以用于迁移或升级前后配置文件进行对比
pt-align
#格式化输出
pt-slave-find
#连接mysql主服务器并查找其所有的从,然后打印出所有从服务器的层级关系。
pt-table-checksum
#用于校验mysql复制的一致性。
#该工具主要是高效的查找数据差异,如果存在差异性,可以通过pt-table-sync来解决
##############################################################################################
主: 新建sbtest数据库
https://blog.****.net/wanbin6470398/article/details/83178755
1.安装sysbench 性能压测工具
yum -y install epel-release(是否报错)
yum -y install sysbench
2.验证:
sysbench –help
3.主库创建 heartbeat心跳表,通过update执行更新时间戳,心跳表指定建立在sbtest库下
pt-heartbeat -S /var/lib/mysql/mysql.sock --database sbtest --update --create-table –daemonize
4.主库利用sysbench模拟数据操作
prepare:准备压测数据 在sbtest库里建10张表,每张表里插入50w条数据
run:执行压测
cleanup:清除压测数据
5. 从库进行监测
pt-heartbeat -S /var/lib/mysql/mysql.sock --master-server-id=1 --monitor --database sbtest
结果表示有延时0s左右,中括号中的数据分别表示1m,5m,15m的平均值
pt-table-checksum 实战
主:create table z1(id int not null,uname varchar(32),primary key(id));
从:插入数据
主:插入数据
在从库上查看复制状态
在slave上利用pt-slave-restart --error-numbers=1062 跳过错误
在slave上查看复制状态
#说明复制已经正常,跳过了错误事务。
#但是master与slave上的这张表数据不一致,所以这种修复方法只能算暂时的。
#之后还需进行修复
Pt-table-checksum:用来检查主从数据一致性
主库执行检测sbtest.z1表是否同步
pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=test.checksums --create-replicate-table --databases=test --tables=z1 h=172.18.47.110,u=huazai007,p=123456,P=3306
–nocheck-replication-filters:是否检查复制的过滤器(默认开启)
–no-check-binlog-format:不检测binlog的过滤器
–replicate=test.checksums:把信息写入指定的表中
–databases=sbtest --tables=z1:校验的表在哪一个库下面,检验的表是什么
H:是IP主的IP地址,u:是库的名字 p:是密码 P:是端口号
表示有两行不同步
Pt-table-sync:用来修复主从数据不一致
--replicate
:指定通过pt-table-checksum得到的表,这2个工具差不多都会一直用。--databases
: 指定执行同步的数据库。--tables
:指定执行同步的表,多个用逗号隔开。--sync-to-master
:指定一个DSN,即从的IP,他会通过show processlist或show slave status 去自动的找主。h=
:服务器地址,命令里有2个ip,第一次出现的是Master的地址,第2次是Slave的地址。u=
:帐号。p=
:密码。--print
:打印,但不执行命令。
`–execute :执行命令。
主库上执行以下命令
#print 修复命令
会把修复的sql语句打印出来
pt-table-sync --replicate=test.checksums h=192.168.88.8,u=sbtest,p=123,P=3306 h=192.168.88.17,u=sbtest,p=123,P=3306 --print
#execute 修复命令
pt-table-sync --replicate=test.checksums h=192.168.88.8,u=sbtest,p=123,P=3306 h=192.168.88.17,u=sbtest,p=123,P=3306 –execute
##再使用pt-table-checksum 验证下
pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=test.checksums --create-replicate-table --databases=sbtest --tables=z1 h=192.168.88.8,u=sbtest,p=123,P=3306