针对MySQL主从数据不一致的情况,可以使用pt-table-checksum工具进行校验
测试背景:健康的主从环境(Slave_IO_Running: Yes&Slave_SQL_Running: Yes)
| 主机地址 | 角色 | 数据目录 | mysql软件目录 | pt工具目录 |
|---|---|---|---|---|
| 10.0.0.51 | master | /data/mysql/data | /usr/local/mysql | /usr/local/pt |
| 10.0.0.52 | slave | data/mysql/data | /usr/local/mysql | /usr/local/pt |
具体步骤:
1、安装PT工具
解压工具包:tar xf percona-toolkit-3.3.1_x86_64.tar.gz 至/usr/local/
修改pt工具名称: mv percona-toolkit-3.3.1_x86_64 pt
2、设计主从测试环境
1)创建world库,当前master与slave数据一致
root@localhost:world 11:17:01 >show databases;
±-------------------+
| Database |
±-------------------+
| information_schema |
| mysql |
| performance_schema |
| pt |
| sys |
| world |
±-------------------+
6 rows in set (0.00 sec)
2)主库world库下创建t1表,并插入5行数据
root@localhost:world 11:52:29 >select * from t1;
±-----+
| id |
±-----+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
±-----+
5 rows in set (0.00 sec)
3)从库已同步主库数据t1表现有5行数据,在此基础上插入新数据
root@localhost:world 11:16:55 >select * from t1;
±-----+
| id |
±-----+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
±-----+
7 rows in set (0.00 sec)
主库与从库数据明显不一致,从库较主库多出2条数据
4)创建用户checksum并授权
root@localhost:world 11:16:55 >GRANT ALL ON . TO ‘checksum’@‘10.0.0.%’ IDENTIFIED BY ‘checksum’;
root@localhost:world 11:16:55 >flush privileges;
3、用PT工具进行数据对比(主库从库都可执行),当前我在从库52上执行。
1)针对库校验:
[root@xbk02 bin]# /usr/local/pt/bin/pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=pt.checksums --create-replicate-table --databases=world h=10.0.0.51,u=checksum,p=checksum,P=3306

2)针对表校验:
[root@xbk02 bin]# /usr/local/pt/bin/pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=pt.checksums --create-replicate-table --databases=world --tables=t1 h=10.0.0.51,u=checksum,p=checksum,P=3306

TS :完成检查的时间
ERRORS :检查时候发生错误和警告的数量
DIFFS :0表示一致,1表示不一致。当指定–no-replicate-check时,会一直为0,当指定–replicate-check-only会显示不同的信息
ROWS :表的行数
CHUNKS :被划分到表中的块的数目
SKIPPED :由于错误或警告或过大,则跳过块的数目
TIME :执行的时间
TABLE :被检查的表名
结果显示从库与主库数据不一致,且多出2行数据。
如有bug,欢迎指正--------------------------------------------------------




