目录
pt-table-checksum
注意事项(在做检验之前一定要先检查如下配置)
- 只能指定一个host,必须为主库的IP;
- 在检查时会向表加S锁
- 如果master和slave的binlog日志不是STATEMENT格式,要用--no-check-binlog-format选项
- 运行之前需要从库的同步IO和SQL进程是YES状态
- 表要有主键索引或唯一键索引(行数不一样 没有主键或者唯一约束,可以校验出来;内容不一样 没有主键或者唯一约束,不能校验出来)
- 需要一个能同时访问主库和从库的账号
- slave需要配置了report_host和report_port, 否则可能执行不成功(Diffs cannot be detected because no slaves were found. Please read the --recursion-method documentation for information.)
METHOD USES
=========== =============================================
processlist SHOW PROCESSLIST
hosts SHOW SLAVE HOSTS
cluster SHOW STATUS LIKE 'wsrep\_incoming\_addresses'
dsn=DSN DSNs from a table
none Do not find slaves
常用参数
--nocheck-replication-filters :不检查复制过滤器,建议启用。后面可以用--databases来指定需要检查的数据库。
--no-check-binlog-format : 不检查复制的binlog模式,要是binlog模式是ROW,则会报错。
--replicate-check-only :只显示不同步的信息。
--recursion-method :发现从库的方式
--replicate= :把checksum的信息写入到指定表中,建议直接写到被检查的数据库当中。
--databases= :指定需要被检查的数据库,多个则用逗号隔开。
--tables= :指定需要被检查的表,多个用逗号隔开
h=192.168.1.128 :Master的地址
u=root :用户名
p=123456 :密码
P=3306 :端口
使用案例
授权用户
create database pt;
GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO 'pt'@'192.168.79.%' IDENTIFIED BY 'mysql';
grant create,delete ,update,insert,select on pt.* to 'pt'@'192.168.79.%';
主从校验
在master库操作
- 注意
--recursion-method
的取值
pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=pt.checksums --databases=test h=192.168.79.112,u=percona,p=mysql,P=3311 --max-load Threads_running=200
pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=pt.checksums --recursion-method=hosts --databases=test h=192.168.79.112,u=percona,p=mysql,P=3311 --max-load Threads_running=200 --chunk-size-limit=8
检查slave上校验信息表
SELECT db, tbl, SUM(this_cnt) AS total_rows, COUNT(*) AS chunks
FROM pt.checksums
WHERE (
master_cnt <> this_cnt
OR master_crc <> this_crc
OR ISNULL(master_crc) <> ISNULL(this_crc))
GROUP BY db, tbl;
+------+------------+-------+------------+-------------+----------------+----------------+----------+----------+------------+------------+---------------------+
| db | tbl | chunk | chunk_time | chunk_index | lower_boundary | upper_boundary | this_crc | this_cnt | master_crc | master_cnt | ts |
+------+------------+-------+------------+-------------+----------------+----------------+----------+----------+------------+------------+---------------------+
| test | runoob_tbl | 1 | 0.002375 | NULL | NULL | NULL | 14dc5712 | 3 | 14dc5712 | 3 | 2019-06-24 11:34:59 |
| test | tbosc | 1 | 0.00312 | NULL | NULL | NULL | 5476b1ca | 2 | a32d2ec6 | 3 | 2019-06-24 11:34:59 |
+------+------------+-------+------------+-------------+----------------+----------------+----------+----------+------------+------------+---------------------+
2 rows in set (0.00 sec)
以上的查询结果为空则表示校验的结果一致,主备库数据一致,否者表示校验结果不一致。
可以看到当前节点和master节点数据条目不一样
遇到的问题
pt-table-sync
- 检测到主数据差异后,使用该工具修复主从不一致的数据
- 注意权限问题,根据报错赋予相应权限即可
pt-table-sync --replicate=test.checksums h=192.168.79.112,u=percona,p=mysql,P=3311 h=192.168.79.112,u=percona,p=mysql,P=3312 --print
注意双主模式的修复
- 双主模式master2修复自身数据
pt-table-sync --execute --sync-to-master h=master2,D=db,t=tbl
pt-table-sync --execute --sync-to-master h=10.25.1.10,u=root,p='xxx' --databases=activity --tables=xxx --max-load thread_runing=20
标签:PT,pt,--,校验,192.168,master,MySQL,table
From: https://www.cnblogs.com/xulinforDB/p/18094738