MySQL主从复制一致性检测

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

在MySQL主从复制过程中,常常需要对某些重要的表进行一致性检查。

    由于主从数据在同步时存在一定的延迟,因此直接读取服务器数据的方式无法严格保证信息的一致性。在数据在同步完全结束之前,一直处于不断变化且并不完整的状态下。锁表的可能实现这个问题,但是性能又是需要考虑的。能对数据验证是最好的。MySQL的 CHECKSUM TABLE指令对于小型列表来说完全够用,但规模庞大的列表往往需要“分块”处理,避免在校验过程中造成负载过高。
 
    Percona工具Pt-table-checksum 是不锁表的。
    基本语法: 
    Pt-table-checksum   [options]  [DSN]
    举例:
    pt-table-checksum   --databases=monster --tables=abc --replicate-check    h=192.168.1.186,u=chk,p=XXXX,P=3308
    这个工具是通过在master上执行一些 checksum queries 主要是使用CRC32函数来实现 可以参考 --funcion 参数,这个是最易于计算的,来检查主从复制的一致性,并将结果打印。如果主从数据不一样的话,会产生不一样的结果。
 
    缺点:可能会增加服务器负载。
    --explain 选项的时候,可以查看到工具是如何校验数据表的。
该工具在master上执行一些 checksum queries ,然后会复制到slave上。
同一时间它只会在一个表上进行操作,所以不会在开始之前做大量的工作,也不许积累太多的内存。
    
    它能够在较大型的表上快速工作的原因是:  it divides each table into chunks of rows 。利用 REPLACE..SELECT query 来对每个 chunk 进行校验。而且它会动态调整 chunk size The tool keeps track of how quickly the server is able to execute the queries, and adjusts the chunks as it learns more about the server’s performance.  它使用一个指数衰减的加权平均保持稳定的块大小)。这样做避免了整个语句在表上运行一次。这样可以降低主从复制延迟的可能性。  在每个 chunk 上进行校验时,超时时间为 0.5S
 
    动态调整chunk size 的大小用到的是一种叫做:’  nibbling’的技术。它会优先利用主键或者非唯一主键来进行分块或者其他的主键,如果没有索引的话,而且表不是很大的话,表会被氛围一个chunk。
 
    该工具不会影响数据库的任何操作,包括复制。(就是不锁表的意思) pt-table-checksum  detects replicas and connects to them automatically。当复制延迟太多的时候,该工具会自动暂停,直到slave 与master同步。如果复制失败的话, pt-table-checksum  pauses and waits.并且不会有任何输出。
 
    工具在执行的时候,它会执行一个explain在每个chunk上,如果太大的话,它会跳过。可以通过 –chunk-size-limit 进行限制。  If a table will be checksummed in a single chunk because it has a small number of rows,  pt-table-checksum  additionally verifies that the table isn’t oversized on replicas  该工具会验证在 slave 上这个表不会太大。这个可以避免在 master  上表时空的,但是在 slave 上这个表很大。
 
    有多种方式保证master负载不会太高。 pt-table-checksum  sets its session-level innodb_lock_wait_timeout to 1 second, so that if there is a lock wait, it will be the victim instead of causing other queries to time out. 。负载过大,他会pause。 pt-table-checksum  will pause if there are more than 25 concurrently executing queries. You should probably set a sane value for your server with the  --max-load  option
 
    如果pt-table-checksum 意外停止   可以使用—resume 选项重启。
 
     After pt-table-checksum finishes checksumming all of the chunks in a table, it pauses and waits for all detected replicas to finish executing the checksum queries. Once that is finished,  it checks all of the replicas to see if they have the same data as the master, and then prints a line of output with the results. It will also print a progress report when it pauses to wait for replication to catch up, and when it is waiting to check replicas for differences from the master
    如果使用 --replicate-check-only 这个选项的话,只有不同的检测结果才会打印出来。





本文转自 位鹏飞 51CTO博客,原文链接:http://blog.51cto.com/weipengfei/976545,如需转载请自行联系原作者
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
SQL 存储 关系型数据库
MySQL的主从复制&主从同步
MySQL的主从复制&主从同步
30 0
|
4月前
|
SQL 关系型数据库 MySQL
面试官:说一下MySQL主从复制的原理?
面试官:说一下MySQL主从复制的原理?
93 0
面试官:说一下MySQL主从复制的原理?
|
4月前
|
SQL 关系型数据库 MySQL
MySQL主从复制
MySQL主从复制
|
2月前
|
SQL 运维 关系型数据库
如何对比MySQL主备数据的一致性?
如何在数据库世界中处理大批量数据变更操作,而不影响业务运行。NineData的OnlineDML解决方案通过无锁方式实现数据变更,确保在线业务的顺畅运行。只需两步操作即可开启OnlineDML功能,让NineData自动处理大型DML操作,分批执行并根据数据库压力进行智能调整,简化操作流程并提供直观操作界面。
323 2
如何对比MySQL主备数据的一致性?
|
14天前
|
负载均衡 容灾 关系型数据库
mysql主从复制
mysql主从复制
30 1
|
1月前
|
SQL 存储 运维
MySQL高可用性:主从复制和集群
MySQL高可用性:主从复制和集群
36 0
|
21小时前
|
关系型数据库 MySQL 中间件
【MySQL实战笔记】07 | 行锁功过:怎么减少行锁对性能的影响?-02 死锁和死锁检测
【4月更文挑战第19天】在高并发环境下,死锁发生在多个线程间循环等待资源时,导致无限期等待。MySQL中,死锁可通过`innodb_lock_wait_timeout`参数设置超时或`innodb_deadlock_detect`开启死锁检测来解决。默认的50s超时可能不适用于在线服务,而频繁检测会消耗大量CPU。应对热点行更新引发的性能问题,可以暂时关闭死锁检测(风险是产生大量超时),控制并发度,或通过分散记录减少锁冲突,例如将数据分拆到多行以降低死锁概率。
11 1
|
13天前
|
SQL 关系型数据库 MySQL
mysql主从复制
mysql主从复制
|
4月前
|
关系型数据库 MySQL Linux
Linux下搭建MySQL主从复制之一主一从架构
Linux下搭建MySQL主从复制之一主一从架构
59 0
|
1月前
|
SQL 关系型数据库 MySQL
深入理解MySQL事务特性:保证数据完整性与一致性
深入理解MySQL事务特性:保证数据完整性与一致性
87 1