1. 安装

安装包地址

安装包:

  • percona-toolkit-3.3.1-1.el7.x86_64.rpm

需要的依赖:

  • perl-Digest-1.17-245.el7.noarch.rpm
  • perl-Digest-MD5-2.52-3.el7.x86_64.rpm
  • perl-IO-Socket-IP-0.21-5.el7.noarch.rpm
  • perl-IO-Socket-SSL-1.94-7.el7.noarch.rpm
  • perl-Mozilla-CA-20130114-5.el7.noarch.rpm
  • perl-Net-LibIDN-0.12-15.el7.x86_64.rpm
  • perl-Net-SSLeay-1.55-6.el7.x86_64.rpm
  • perl-TermReadKey-2.30-20.el7.x86_64.rpm
  1. # 使用yum本地安装
  2. yum localinstall -y perl-*
  3. yum localinstall -y percona-toolkit-3.3.1-1.el7.x86_64.rpm

2. 环境信息

主备信息
  • 主:10.125.63.40:3310
  • 从:10.125.63.54:3310

账号信息

  • 账号密码:hotdb_datasource,hotdb_datasource

    3. 校验主备数据

  • pt-table-checksum 命令校验主备数据是否一致,

  • pt-table-sync 修复不一致数据

1. 在主库新建percona库及相关表,用于存放校验信息

#1
create database percona;

#2
-- 新建 dsns 表,用于存放从库信息
CREATE TABLE dsns (
    id INT (11) NOT NULL AUTO_INCREMENT,
    parent_id INT (11) DEFAULT NULL,
    dsn VARCHAR (255) NOT NULL,
    PRIMARY KEY (id)    
);

#3
-- 插入从库地址信息
insert into dsns(dsn) values("h=10.125.63.54,P=3310,u=hotdb_datasource,p=hotdb_datasource");

#4
程序运行时,会创建checksums表,用于存放校验信息

2. 校验

使用 pt-table-checksum 命令可检测主备数据是否一致

参数说明:

  • —host: master的IP
  • —user: master的用户
  • —databases: 指定校验的库,多个则用逗号隔开,若不指定则校验所有库
  • —ignore-tables-regex:正则过滤不校验的表
  • —replicate:指定存放校验信息的表
  • --no-check-binlog-format:不检查复制的binlog模式,要是binlog模式是ROW,则会报错
  • —no-check-replication-filters:不检查复制过滤器,建议启用
  • —recursion-method:发现从库的方式。pt-table-checksum 默认可以在主库的 processlist 中找到从库复制进程,从而识别出有哪些从库,但如果使用是非标准3306端口,会导致找不到从库信息,这里使用的事dsn指定从库地址
  • —tables:指定需要被检查的表,多个用逗号隔开
# 主库 10.125.63.40:3310
# 从库 10.125.63.54:3310
# 校验db03下,除hotdb开头的表之外的所有表
pt-table-checksum --host=10.125.63.40 --user=hotdb_datasource --password=hotdb_datasource --port=3310 --databases=db03 --ignore-tables-regex=hotdb.* --replicate=percona.checksums --no-check-binlog-format --no-check-replication-filters --recursion-method dsn=t=percona.dsns,h=10.125.63.54,P=3310,u=hotdb_datasource,p=hotdb_datasource


# 主库 10.125.63.40:3310
# 从库 10.125.63.54:3310
# 校验db03下,tb1、tb2表
pt-table-checksum --host=10.125.63.40 --user=hotdb_datasource --password=hotdb_datasource --port=3310 --databases=db03 --tables=tb1,tb2 --replicate=percona.checksums --no-check-binlog-format --no-check-replication-filters --recursion-method dsn=t=percona.dsns,h=10.125.63.54,P=3310,u=hotdb_datasource,p=hotdb_datasource

2021-12-08-19-42-11-image.png
2021-12-08-20-04-10-image.png

3. 修复不一致的数据

使用 pt-table-sync 可将不一致的数据生成SQL语句,进行修复

参数说明:

  • —sync-to-master:指定一个DSN,即从库的IP,他会通过show processlist或show slave status 去自动的找主库
  • —replicate:指定通过pt-table-checksum得到的表。
  • —print:打印,但不执行命令。
  • —execute:执行命令。
# 从库地址:10.125.63.54:3310
# --print 将不一致的数据生成SQL语句,打印到控制台中
pt-table-sync --replicate=percona.checksums --sync-to-master h=10.125.63.54,u=hotdb_datasource,p=hotdb_datasource,P=3310 --print

2021-12-08-20-14-15-image.png