阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL主从同步校验与重新同步

108次阅读
没有评论

共计 3549 个字符,预计需要花费 9 分钟才能阅读完成。

主从复制环境中,可能有种种原因导致主、从库数据不一致的情况,主从一致性也一直是 DBA 需要关注的问题,校验 MySQL 的主从一致性一般有多种工具,诸如 MySQL 自带的 checksum、mysqldiff、pt-table-checksum 等,每种工具各有优缺,本文就 pt-table-checksum 工具进行介绍和记录实验环节。
 
下载二进制版本的 percona-toolkit 工具箱
https://www.percona.com/downloads/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 这两个工具还有很多重要的特性和参数,这里仅做实验用,具体的生产还需要哪些参数,比如只同步某张表等以后会继续深入研究。

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-09/134814.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计3549字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中