percona-toolkit的使用

percona-toolkit的使用

首先配置mysql主从

环境:

​ master:192.168.0.104

​ slave:192.168.0.106

上传安装包

主从俩台服务器都进行操作:

yum install -y percona-toolkit-3.1.0-2.el7.x86_64.rpm
[root@192 ~]# pt
pt-align                  pt-ioprofile              pt-slave-delay
pt-archiver               pt-kill                   pt-slave-find
ptaskset                  pt-mext                   pt-slave-restart
pt-config-diff            pt-mongodb-query-digest   pt-stalk
pt-deadlock-logger        pt-mongodb-summary        pt-summary

安装一个压测工具

[root@192 ~]# yum -y install epel-release #首先安装epel源
[root@192 ~]# yum -y install sysbench

主库上面操作:

MariaDB [(none)]> create database sbtest;
MariaDB [(none)]> grant all on *.* to 'sbtest'@'192.168.0.106' identified by '123456';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> grant all on *.* to 'sbtest'@'192.168.0.104' identified by '123456';
MariaDB [(none)]> flush privileges;

pt-heartbeat

用于监控主从的工具

pt-heartbeat 原理

主库创建一张heartbeat表,表中有个时间戳字段。主库上pt-heartbeat的update线程会在指定时间间隔更新时间戳。

从库上的pt-heartbeat的monitor线程会检查复制的心跳记录,这个记录就是主库修改的时间戳。然后和当前系统时间进行对比,得出时间上的差异,差异值就是延迟的时间大小。由于heartbeat表中有server_id字段,在监控某个从库的延迟时指定参考主库的server_id即可。

pt-heartbeat 实战

主库创建 heartbeat心跳表,通过update执行更新时间戳,心跳表指定建立在sbtest库下

pt-heartbeat -S /var/lib/mysql/mysql.sock --database sbtest --update --create-table --daemonize

sbtest : 将heartbeat表建在sbtest库下

update --create-table:更新主库心跳表

daemonize:后台运行

prepare:准备压测数据 在sbtest库下建10张表,每张表插入50w条数据

run:执行压测

cleanup:清除压测数据

准备部分
[root@192 ~]# sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host='192.168.0.104' --mysql-user=sbtest --mysql-password=123456 --mysql-port=3306 --db-driver=mysql --mysql-db=sbtest --tables=10 --table-size=500000 --report-interval=10 --threads=128 --time=120 prepare
sysbench 1.0.17 (using system LuaJIT 2.0.4)

Initializing worker threads...

Creating table 'sbtest7'...
Creating table 'sbtest4'...
Creating table 'sbtest2'...
Creating table 'sbtest1'...
Creating table 'sbtest6'...
Creating table 'sbtest5'...
开始压测
[root@192 ~]# sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host='192.168.0.104' --mysql-user=sbtest --mysql-password=123456 --mysql-port=3306 --db-driver=mysql --mysql-db=sbtest --tables=10 --table-size=500000 --report-interval=10 --threads=128 --time=120 run
sysbench 1.0.17 (using system LuaJIT 2.0.4)

Running the test with following options:
Number of threads: 128
Report intermediate results every 10 second(s)
Initializing random number generator from current time


Initializing worker threads...

Threads started!

[ 10s ] thds: 128 tps: 517.20 qps: 10483.47 (r/w/o: 7358.50/2077.78/1047.19) lat (ms,95%): 450.77 err/s: 0.00 reconn/s: 0.00

此时主从数据库中都有10张表,每一张50w条数据

从库中操作

[root@localhost src]# pt-heartbeat -S /var/lib/mysql/mysql.sock  --master-server-id=1 --monitor --database sbtest
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 ]
0.00s [  0.00s,  0.00s,  0.00s ]
0.00s [  0.00s,  0.00s,  0.00s ]

说明无延迟

此时数据库中的数据都是垃圾书库  可以清除了
[root@192 ~]# sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host='192.168.0.104' --mysql-user=sbtest --mysql-password=123456 --mysql-port=3306 --db-driver=mysql --mysql-db=sbtest --tables=10 --table-size=500000 --report-interval=10 --threads=128 --time=120 cleanup
sysbench 1.0.17 (using system LuaJIT 2.0.4)

Dropping table 'sbtest1'...
Dropping table 'sbtest2'...
Dropping table 'sbtest3'...
Dropping table 'sbtest4'...
Dropping table 'sbtest5'...
Dropping table 'sbtest6'...
Dropping table 'sbtest7'...
Dropping table 'sbtest8'...
Dropping table 'sbtest9'...
Dropping table 'sbtest10'...

pt-slave-restart

pt-slave-restart是一个可以跳过特定错误并自动重启slave的工具。

pt-slave-restart工作原理

pt-slave-restart监控一个或者多个MySQL复制slave,试图跳过引起错误的语句。它以指数变化的睡眠时间职能地检查slave。你可以指定要跳过的错误然后运行slave一直到一个确定的binlog位置。

pt-slave-restart一旦检测到slave有错误就会打印一行。默认情况下该打印行为:时间戳、连接信息、relay_log_file,relay_log_pos,以及last_errno。你可以使用–verbose选项添加更多信息,也可以使用–quiet选项阻止所有输出。

pt-slave-restart实战

在master上创表

create table z1(id int not null,uname varchar(32),primary key(id));

在slave上插入数据

insert into z1(id,uname) values(3,'python');

在master上插入数据

insert into z1(id,uname) values(2,'mysql');
insert into z1(id,uname) values(3,'java');

在slave上查看复制状态

show slave status\G
 
...
             Slave_IO_Running: Yes
            Slave_SQL_Running: No
...
               Last_SQL_Errno: 1062
               Last_SQL_Error: Could not execute Write_rows event on table test.z1; Duplicate entry '3' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log my3306_binlog.000071, end_log_pos 1214

此时已经人为造成了主从的不同步

此时在slave使用pt-slave-restart

[root@192 ~]#pt-slave-restart --error-numbers=1062
2019-12-12T16:54:56  mysql-relay.000006  1073644063 1062 

在slave上查看状态

           Slave_IO_Running: Yes
           Slave_SQL_Running: Yes

说明已经成功跳过错误事务,但是master和slave上的数据还是不一样的,需要之后进行修复。

[在做下面操作是先在slave服务器上,对从ip授权一个sbtest的权限]

pt-table-checksum

用于检测主从数据的一致性

原理

pt-table-checksum用于校验主从数据的一致性,该命令在主库上执行校验,然后对复制的一致性进行检查,来对比主从之间的校验值,并输出对比结果

pt-table-checksum实战

[root@192 ~]# pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=sbtest.checksums --create-replicate-table --databases=sbtest --tables=z1 h=192.168.0.104,u=sbtest,p=123456,P=3306
Checking if all tables can be checksummed ...
Starting checksum ...
            TS ERRORS  DIFFS     ROWS  DIFF_ROWS  CHUNKS SKIPPED    TIME TABLE
04-28T21:46:36      0      1        3          0       1       0   0.017 sbtest.z1


#注意
#1)根据测试,需要一个即能登录主库,也能登录从库的账号;huazai007  123456
#2)只能指定一个host,必须为主库的IP;
#3)在检查时会向表加S锁;
#4)运行之前需要从库的同步IO和SQL进程是YES状态。

pt-table-sync

用来修复主从数据不一致

原理

pt-table-sync高效的同步MySQL表之间的数据,他可以做单向和双向同步的表数据。他可以同步单个表,也可以同步整个库。它不同步表结构、索引、或任何其他模式对象。所以在修复一致性之前需要保证他们表存在。

pt-table-sync实战

pt-table-sync --replicate=sbtest.checksums h=192.168.0.104,u=abtest,p=123456,P=3306 h=192.168.0.106,u=abtest,p=123456,P=3306 --print

会对不一致内容进行输出

root@192 ~]# pt-table-sync --replicate=sbtest.checksums h=192.168.0.104,u=abtest,p=123456,P=3306 h=192.168.0.106,u=abtest,p=123456,P=3306 --execute

进行修复

[root@192 ~]# pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=sbtest.checksums --create-replicate-table --databases=sbtest --tables=z1 h=192.168.0.104,u=sbtest,p=123456,P=3306
Checking if all tables can be checksummed ...
Starting checksum ...
            TS ERRORS  DIFFS     ROWS  DIFF_ROWS  CHUNKS SKIPPED    TIME TABLE
04-28T21:46:36      0      0        3          0       1       0   0.017 sbtest.z1

再次查看主从不一致已经修复

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

峰宝宝守护。

乐已忘忧,心旷神愉

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值