群里好几位同学问 pt-table-checksum 3.0.4, 主从两个表数据是不一致,为啥检测不出来?前段时间自己也测试过,只是没整理成随笔^_-
一、基本环境
VMware10.0+CentOS6.9+MySQL5.7.19
| ROLE | HOSTNAME | BASEDIR | DATADIR | IP | PORT |
| Master | ZST1 | /usr/local/mysql | /data/mysql/mysql3306/data | 192.168.85.132 | 3306 |
| Slave | ZST2 | /usr/local/mysql | /data/mysql/mysql3306/data | 192.168.85.133 | 3306 |
基于Row+Gtid搭建的一主一从复制结构:Master->Slave
二、构造差异数据
借助样例数据库sakila做测试
# 主库flush logs mydba@192.168.85.132,3306 [sakila]> flush logs; # 主库开启general_log [root@ZST1 ~]# rm -rf /data/mysql/mysql3306/data/mysql-general.log mydba@192.168.85.132,3306 [sakila]> set global general_log_file='/data/mysql/mysql3306/data/mysql-general.log'; mydba@192.168.85.132,3306 [sakila]> set global general_log =1; mydba@192.168.85.132,3306 [sakila]> show variables like 'general_log%'; # 从库修改部分数据,造成不一致 mydba@192.168.85.133,3306 [sakila]> delete from sakila.actor where actor_id<=3; # 外键约束删除失败 mydba@192.168.85.133,3306 [sakila]> update sakila.actor set last_name=first_name where actor_id<=3; # 主库sakila.actor数据 mydba@192.168.85.132,3306 [sakila]> select * from sakila.actor limit 3; +----------+------------+-----------+---------------------+ | actor_id | first_name | last_name | last_update | +----------+------------+-----------+---------------------+ | 1 | PENELOPE | GUINESS | 2006-02-15 04:34:33 | | 2 | NICK | WAHLBERG | 2006-02-15 04:34:33 | | 3 | ED | CHASE | 2006-02-15 04:34:33 | +----------+------------+-----------+---------------------+ # 从库sakila.actor数据 mydba@192.168.85.133,3306 [sakila]> select * from sakila.actor limit 3; +----------+------------+-----------+---------------------+ | actor_id | first_name | last_name | last_update | +----------+------------+-----------+---------------------+ | 1 | PENELOPE | PENELOPE | 2017-11-08 09:54:10 | | 2 | NICK | NICK | 2017-11-08 09:54:10 | | 3 | ED | ED | 2017-11-08 09:54:10 | +----------+------------+-----------+---------------------+