mysql主从同步校验与重新同步_MySQL主从同步校验与重新同步

主从复制环境中,可能有种种原因导致主、从库数据不一致的情况,主从一致性也一直是DBA需要关注的问题,校验MySQL的主从一致性一般有多种工具,诸如MySQL自带的checksum、mysqldiff、pt-table-checksum等,每种工具各有优缺,本文就pt-table-checksum工具进行介绍和记录实验环节。

下载二进制版本的percona-toolkit工具箱

本文用的是2.2.18版本

[root@HE3

~]# tar xvf percona-toolkit-2.2.18.tar.gz

[root@HE3

~]# cd percona-toolkit-2.2.18

[root@HE3

percona-toolkit-2.2.18]# perl Makefile.PL

[root@HE3 percona-toolkit-2.2.18]# make && make install

主库创建checksums用户用于校验主从是否一致mysql>GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO 'checksums'@'%' IDENTIFIED BY 'MANAGER';

开始执行校验,在校验结束后,会在test库下创建表名为checksums的表用于存储主从一致性信息[root@HE3 ~]#/usr/local/bin/pt-table-checksum h='192.168.1.250',u='checksums',p='MANAGER',P=3306 -d www --nocheck-replication-filters --replicate=test.checksums --no-check-binlog-format

从库可以执行本条SQL来查看哪些表有主从不一致的情况,此时主从是一致的所以没有结果mysql> SELECT db,tbl, SUM(this_cnt) AS total_rows, COUNT(*) AS chunks FROM test.checksums WHERE ( master_cnt <> this_cnt OR master_crc <> this_crc OR ISNULL(master_crc) <> ISNULL(this_crc)) GROUP BY db, tbl;

Empty set (0.03 sec)

我们先删除www库下的某张表的某一行

[SQL]delete from decorate_order where id=10;

受影响的行: 1

时间: 0.003s

再次运行同步校验[root@HE3 ~]#/usr/local/bin/pt-table-checksum h='192.168.1.250',u='checksums',p='MANAGER',P=3306 -d www --nocheck-replication-filters --replicate=test.checksums --no-check-binlog-format

可以发现在从库上执行本条SQL可以看到主从不一致的表名mysql> SELECT db,tbl, SUM(this_cnt) AS total_rows, COUNT(*) AS chunks FROM test.checksums WHERE( master_cnt <> this_cnt OR master_crc <> this_crc OR ISNULL(master_crc) <> ISNULL(this_crc)) GROUP BY db, tbl;

+-----+----------------+------------+--------+

| db  | tbl            | total_rows | chunks |

+-----+----------------+------------+--------+

| www |

decorate_order |      25356 |      1 |

+-----+----------------+------------+--------+

1 row in set (0.00sec)

同理我们删掉erp库下的某张表的某一行[SQL]delete from erp_mard id=104;

受影响的行: 1

时间: 0.002s

再次运行同步校验[root@HE3 ~]#/usr/local/bin/pt-table-checksum h='192.168.1.250',u='checksums',p='MANAGER',P=3306 -d www --nocheck-replication-filters --replicate=test.checksums --no-check-binlog-format

可以发现刚刚删除的erp_mard表已经进入到了我们的主从不一致记录表里mysql> SELECT db,tbl, SUM(this_cnt) AS total_rows, COUNT(*) AS chunks FROM test.checksums WHERE ( master_cnt <> this_cnt OR master_crc <> this_crc OR ISNULL(master_crc) <> ISNULL(this_crc)) GROUP BY db, tbl;

+-----+----------------+------------+--------+

| db  | tbl            | total_rows | chunks |

+-----+----------------+------------+--------+

| erp |

erp_mard       |      11183 |      1 |

| www |

decorate_order |      25356 |      1 |

+-----+----------------+------------+--------+

2 rows in set (0.02sec)

我们在主库执行pt-table-sync命令来进行重新同步(请做好备份,重要的话说三遍,备份备份备份)

我们先利用print命令,打印出修改的语句但不执行,这里本人推荐用print命令,筛选出需要在不同从库执行的语句,最好不要直接excute执行

[root@HE3 ~]#/usr/local/bin/pt-table-sync --print --replicate  test.checksums  h='192.168.1.250',u='sys_admin',p='MANAGER'

本条命令会对主库下所有的从库进行同步

[root@HE3 ~]#/usr/local/bin/pt-table-sync --execute --replicate  test.checksums  h='192.168.1.250',u='sys_admin',p='MANAGER'

同步完后重新验证[root@HE3 ~]#/usr/local/bin/pt-table-checksum h='192.168.1.250',u='checksums',p='MANAGER',P=3306 -d www --nocheck-replication-filters --replicate=test.checksums --no-check-binlog-format

[root@HE3 ~]# /usr/local/bin/pt-table-checksum h='192.168.1.250',u='checksums',p='MANAGER',P=3306 -d erp --nocheck-replication-filters --replicate=test.checksums --no-check-binlog-format

可以发现checksums表已经没有不同步的表了mysql> SELECT db,tbl, SUM(this_cnt) AS total_rows, COUNT(*) AS chunks FROM test.checksums WHERE ( master_cnt <> this_cnt OR master_crc <> this_crc OR ISNULL(master_crc) <> ISNULL(this_crc)) GROUP BY db, tbl;

Empty set (0.03 sec)

至此主从校验、同步完成

pt-table-checksum,pt-table-sync这两个工具还有很多重要的特性和参数,这里仅做实验用,具体的生产还需要哪些参数,比如只同步某张表等以后会继续深入研究

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值