基于GTID的主从实践系列之③Percona工具使用(持续更新)

架构

主:172.17.100.80

从:172.17.100.104

sysbench:172.17.100.100

MySQL版本:5.7.24


首先完成主从的搭建

参考文档:基于GTID的主从搭建

sysbench创建数据到主库

参考文档:sysbench安装及使用

Percona组件的部署

yum install -y perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL

yum install -y http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm

yum install -y percona-toolkit

验证Percona组件部署是否正常

pt-query-digest --help


pt-heartbeat测试复制延迟

#搭建配置

主库创建数据库pt(自动同步到从库,从库无需创建)

create database pt;

在搭建pt组件的机器上执行

pt-heartbeat -D pt --update -uroot -p密码 -P主库端口 -h主库IP --create-table --daemonize

创建完成后,在pt库里会有一张heartbeat表

#查看复制延迟的执行

pt-heartbeat -D pt --monitor -uroot -p密码 -P从库端口 -h从库IP

如果把monitor改成check,会只刷新一次

(监控复制延迟效果如下,这是一个sysbench导入时的复制延迟监控)

以下图第一行为例,意思是

延迟时间:当前364秒【334.5秒(1分内平均),214.5秒(5分内平均),73.83秒(15分内平均)】

基于GTID的主从实践系列之③Percona工具使用(持续更新)_第1张图片

pt-table-checksum

主库:172.17.100.80

从库:172.17.100.104

Percona组件部署IP:172.17.100.104

到主库执行

GRANT SELECT, DELETE,INSERT,UPDATE, CREATE, DROP, PROCESS, INDEX, SUPER, EXECUTE, REPLICATION SLAVE ON *.* TO ptsum@'%' identified by 'ptsum';

GRANT SELECT, DELETE,INSERT,UPDATE, CREATE, DROP, PROCESS, INDEX, SUPER, EXECUTE, REPLICATION SLAVE ON *.* TO ptsum@localhost identified by 'ptsum';

反正开启了主从同步,这玩意也会自己同步到从库的

老版本的checksum需要自己去建表,新版本则不需要手动建表了,我这里是新版本,不存在手动建表的操作

#到部署有Percona组件的机器上执行

pt-table-checksum --nocheck-replication-filters --replicate=test.checksums --databases=需要检测一致性的库 --no-check-binlog-format h=主库IP,u=ptsum,p=主库密码,P=主库端口

说明一下上面这条语句

--replicate=test.checksums     test.checksums表就是我们前面说的新版本自动创建的表,确保别建在业务库下就行,test库要存在;这张表会用来存放每次校对之后的结果,有参数可以选择在校对之前清空这张表,具体的不在这里讨论

--databases=需要检测一致性的库  比如我要比对主从的sbtest库是否一致,则--databases=sbtest

--no-check-binlog-format  该参数必须写上,默认是statement,但生产库通常是row格式

前面的语句执行结果如下(红框处为0,表示数据一致)

关于DSN

如果主库端口和从库端口不同;或者一个主库有非常多的从库;这种时候很可能出现checksum在连入到主库之后根本无法找到从库的情况,这时候就需要添加一条路由来指引从库了,这也就是DSN

登录主库,仍然使用test库,创建一张dsn表

use test;

CREATE TABLE `dsns` ( `id` int(11) NOT NULL AUTO_INCREMENT,`parent_id` int(11) DEFAULT NULL,`dsn` varchar(255) NOT NULL,PRIMARY KEY (`id`));

insert into dsns values(1,1,'h=slave的IP,u=ptsum,p=ptsum,P=从库端口');

#到部署有Percona组件的机器上执行

pt-table-checksum --nocheck-replication-filters --replicate=test.checksums --databases=sbtest --no-check-binlog-format h=主库IP,u=ptsum,p=ptsum,P=主库端口 --recursion-method dsn=t=test.dsns,h=从库IP,u=ptsum,p=ptsum,P=从库端口

上面那条语句的意思就是用pt登录到主库上,通过读取主库dsn里面的路由关系去找到从库,然后进行一致性校验

如果pt在主库上有部署,那么加粗斜体部分的主库ip等内容是可以不写的,但u和p要写出来,否则会以root方式去登陆mysql

--recursion-method这个参数就表示会以dsn去寻找从库了,后面需要跟上dsn的相关参数

执行效果如下

基于GTID的主从实践系列之③Percona工具使用(持续更新)_第2张图片

pt-table-sync

从库上执行操作

delete from sbtest1 limit 10;

此时主库和从库的sbtest1表相差10行数据

基于GTID的主从实践系列之③Percona工具使用(持续更新)_第3张图片

通过checksum查看

基于GTID的主从实践系列之③Percona工具使用(持续更新)_第4张图片

#根据检查生成的test.checksums进行数据的快速恢复

pt-table-sync --execute h=主库IP,u=root,p=主库密码 --replicate test.checksums 主库hostname

(本来想着主库的test.checksums也会同步到从库上,上面的语句试了下h=从库IP,执行倒是不报错,但数据没有恢复成功)

执行完成后,删掉的10条数据被补全

基于GTID的主从实践系列之③Percona工具使用(持续更新)_第5张图片


#如果没有经过checksum,直接同步2个库中某个表,则采用下列语句

pt-table-sync --execute h=主库IP,D=sbtest,t=sbtest1,u=root,p=主库密码 h=从库IP,u=root,p=从库密码 --no-check-slave


pt-osc

待续...

你可能感兴趣的:(基于GTID的主从实践系列之③Percona工具使用(持续更新))