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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

主从复制环境中,可能有种种原因导致主、从库数据不一致的情况,主从一致性也一直是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用户用于校验主从是否一致

1
mysql> GRANT  SELECT , PROCESS, SUPER, REPLICATION SLAVE  ON  *.*  TO  'checksums' @ '%'  IDENTIFIED  BY  'MANAGER' ;

开始执行校验,在校验结束后,会在test库下创建表名为checksums的表用于存储主从一致性信息

1
[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来查看哪些表有主从不一致的情况,此时主从是一致的所以没有结果

1
2
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库下的某张表的某一行


1
2
3
[SQL] delete  from  decorate_order  where  id=10;
受影响的行: 1
时间: 0.003s


 

 

再次运行同步校验

1
[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可以看到主从不一致的表名

1
2
3
4
5
6
7
8
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库下的某张表的某一行

1
2
3
[SQL] delete  from  erp_mard id=104;
受影响的行: 1
时间: 0.002s


 

 

再次运行同步校验

1
[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表已经进入到了我们的主从不一致记录表里

1
2
3
4
5
6
7
8
9
10
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 |
+ -----+----------------+------------+--------+
rows  in  set  (0.02sec)

 

 

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



1
2
3
4
5
6
我们先利用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'



同步完后重新验证

1
2
[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表已经没有不同步的表了

1
2
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这两个工具还有很多重要的特性和参数,这里仅做实验用,具体的生产还需要哪些参数,比如只同步某张表等以后会继续深入研究







 本文转自 dbapower 51CTO博客,原文链接:http://blog.51cto.com/suifu/1836551,如需转载请自行联系原作者


 

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
28天前
|
关系型数据库 MySQL
elasticsearch对比mysql以及使用工具同步mysql数据全量增量
elasticsearch对比mysql以及使用工具同步mysql数据全量增量
21 0
|
1月前
|
SQL 存储 关系型数据库
MySQL的主从复制&主从同步
MySQL的主从复制&主从同步
30 0
|
1月前
|
关系型数据库 MySQL API
Flink CDC产品常见问题之mysql整库同步到starrock时任务挂掉如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
1月前
|
SQL DataWorks 关系型数据库
DataWorks常见问题之dataworks同步Rds任务失败如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
|
1月前
|
SQL 关系型数据库 MySQL
解决MySQL主从慢同步问题的常见的解决方案:
解决MySQL主从慢同步问题的方法有很多,以下是一些常见的解决方案: 1. 检查网络连接:确保主从服务器之间的网络连接稳定,避免网络延迟或丢包导致数据同步缓慢。 2. 优化数据库配置:调整MySQL的配置参数,如增大binlog文件大小、调整innodb_flush_log_at_trx_commit等参数,以提高主从同步性能。 3. 检查IO线程和SQL线程状态:通过SHOW SLAVE STATUS命令检查IO线程和SQL线程的状态,确保它们正常运行并没有出现错误。 4. 检查主从日志位置:确认主从服务器的binlog文件和位置是否正确,避免由于错误的日志位置导致同步延迟。 5.
122 1
|
1月前
|
运维 安全 网络安全
Flink CDC产品常见问题之flink1.18同步mysql-starrocks pipeline时报错如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
1月前
|
消息中间件 关系型数据库 MySQL
Flink CDC产品常见问题之flinkcdc3同步mysql到doris的时候语句不同步如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
15天前
|
SQL 关系型数据库 MySQL
mysql主从同步出错解决办法
mysql主从同步出错解决办法
10 0
|
1月前
|
关系型数据库 MySQL API
Flink CDC产品常见问题之mysql整库同步到starrock时任务挂掉如何解决
Flink CDC产品常见问题之mysql整库同步到starrock时任务挂掉如何解决
|
1月前
|
分布式计算 DataWorks 关系型数据库
DataWorks报错问题之dataworks同步rds数据到maxcompute时报错如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。