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
# 使用yum本地安装yum localinstall -y perl-*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
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


