MySQL中的主从复制一致性检测

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

由于主从数据在同步时存在一定的延迟,因此直接读取服务器数据的方式无法严格保证信息的一致性。在数据在同步完全结束之前,一直处于不断变化且并不完整的状态下。锁表的可能实现这个问题,但是性能又是需要考虑的。能对数据验证是最好的。MySQL的CHECKSUM TABLE指令对于小型列表来说完全够用,但规模庞大的列表往往需要“分块”处理,避免在校验过程中造成负载过高。

Percona工具Pt-table-checksum 是不锁表的。

基本语法:

    Pt-table-checksum   [options]  [DSN]

举例:

    pt-table-checksum--databases=monster --tables=abc --replicate-checkh=192.168.1.186,u=chk,p=XXXX,P=3308

这个工具是通过在master上执行一些 checksum queries 主要是使用CRC32函数来实现 可以参考 --funcion 参数,这个是最易于计算的,来检查主从复制的一致性,并将结果打印。如果主从数据不一样的话,会产生不一样的结果。

本栏目更多精彩内容:http://www.bianceng.cn/database/MySQL/

缺点:可能会增加服务器负载。

--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 选项重启。

Afterpt-table-checksumfinishes 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 这个选项的话,只有不同的检测结果才会打印出来。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索工具
, 主从
, 一致性
, master
, progress.report
, data replica
, 主从表
, The
, checksum
, 复制Table
Queries
mysql主从一致性核对、mysql 主从数据一致性、mysql主从一致性、mysql 检查主从一致性、mysql 主从复制,以便于您获取更多的相关知识。

时间: 2024-08-01 22:45:14

MySQL中的主从复制一致性检测的相关文章

如何实现MySQL中的用户管理

mysql|用户管理 MySQL有一套先进的但非标准的安全/授权系统,掌握其授权机制是开始操作MySQL数据库必须要走的第一步,对于一个熟悉SQL基本操作的人来说,也是MySQL所有的知识中比较难以理解的一个部分.本文通过揭开其授权系统的运作机制,希望大家能够可以更好地操作和使用这个优秀的数据库系统. 本文主要参考了MySQL安装所附的使用手册第六章中的部分内容. 1.授权机制的主要作用是什么? 授权机制的基本作用是给某个主机上的用户对某个数据库以select,insert,update和det

分享MYSQL中的各种高可用技术(源自姜承尧大牛)

原文:分享MYSQL中的各种高可用技术(源自姜承尧大牛) 分享MYSQL中的各种高可用技术(源自姜承尧大牛) 图片和资料来源于MYSQL大牛姜承尧老师(MYSQL技术内幕作者) 姜承尧: 网易杭州研究院 技术经理 主导INNOSQL的开发 mysql高可用各个技术的比较 数据库的可靠指的是数据可靠  数据库可用指的是数据库服务可用 可靠的是数据:例如工商银行,数据不能丢失 可用的是服务:服务器不能宕机       灵活运用MYSQL的各种高可用技术来达到下面各种级别的高可用要求 要达到99.9%

MySQL中InnoDB存储引擎的锁的基本使用教程_Mysql

MyISAM和MEMORY采用表级锁(table-level locking) BDB采用页面锁(page-leve locking)或表级锁,默认为页面锁 InnoDB支持行级锁(row-level locking)和表级锁,默认为行级锁 各种锁特点 表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生冲突的概率最高,并发度最低 行级锁:开销大,加锁慢:会出现死锁:锁定粒度最小,发生锁冲突的概率最低,并发度也最高 页面锁:开销和加锁时间介于表锁和行锁之间:会出现死锁:锁定粒度介于表锁和行锁之

解决mysql使用GTID主从复制错误问题

解决mysql使用GTID主从复制错误问题 做MySQL主从的话肯定会遇到很多同步上的问题, 大多数都是由于机器宕机,重启,或者是主键冲突等引起的从服务器停止工作, 这里专门收集类似问题并提供整理解决方案,仅供参考! 1.主从网络中断,或主服务器重启,或从服务器重启,从会根据配置文件中的时间(默认1分钟)去自动重连主服务器,直到网络和服务均可正常连接,连接正常后可自动继续同步之前文件,不需要任何人工干预! 2.当主从因为人为原因出现不同步的时候,可以用下面命令进行同步:  代码如下 复制代码 L

MySQL中的mysqldump命令使用详解

mysql|详解 MySQL有很多可以导入数据的方法,然而这些只是数据传输中的一半,另外的一般是从MySQL数据库中导出数据.有许多的原因我们需要导出数据.一个重要的原因是用于备份数据库.数据的造价常常是昂贵的,需要谨慎处理它们.经常地备份可以帮助防止宝贵数据地丢失:另外一个原因是,也许您希望导出数据来共享. 在这个信息技术不断成长的世界中,共享数据变得越来越常见. 比方说Macmillan USA维护护着一个将要出版的书籍的大型数据库.这个数据库在许多书店之间共享,这样他们就知道哪些书将会很快

MySQL中如何禁用binlog中的语句

MySQL复制是异步的,也就是说是非同步的过程,它不会校验数据库中数据的一致性,只要SQL语法正确并且没有错误就能成功执行 MASTERtest 12:20:40>create table tab01 -> (id int(10) primary key , -> name varchar(20)); Query OK, 0 rows affected (0.03 sec) MASTERtest 12:21:32> MASTERtest 12:21:49>show maste

针对Mysql中mysqldump命令使用的详解

MySQL有很多可以导入数据的方法,然而这些只是数据传输中的一半,另外的一般是从MySQL数据库中导出数据.有许多的原因我们需要导出数据.一个重要的原因是用于备份数据库.数据的造价常常是昂贵的,需要谨慎处理它们.经常地备份可以帮助防止宝贵数据地丢失:另外一个原因是,也许您希望导出数据来共享. 在这个信息技术不断成长的世界中,共享数据变得越来越常见. 比方说Macmillan USA维护护着一个将要出版的书籍的大型数据库.这个数据库在许多书店之间共享,这样他们就知道哪些书将会很快出版.医院越来越走

简单介绍MySQL中的事务机制

  从一个问题开始 最近银行这个事情闹的比较厉害啊,很多储户的钱放在银行,就不翼而飞了,而银行还不管不问,说是用户的责任,打官司,用户还能输了,这就是"社会主义".咱还是少发牢骚,多种树,莫谈国事. 说到银行存钱,就不得不说一下从银行取钱这件事情,从ATM机取钱这件简单的事情,实际上主要分为以下几个步骤: 登陆ATM机,输入密码; 连接数据库,验证密码; 验证成功,获得用户信息,比如存款余额等; 用户输入需要取款的金额,按下确认键; 从后台数据库中减掉用户账户上的对应金额; ATM吐出

mysql中不同事务隔离级别下数据的显示效果

  事务是一组原子性的SQL查询语句,也可以被看做一个工作单元.如果数据库引擎能够成功地对数据库应用所有的查询语句,它就会执行所有查询,如果任何一条查询语句因为崩溃或其他原因而无法执行,那么所有的语句就都不会执行.也就是说,事务内的语句要么全部执行,要么一句也不执行. 事务的特性:acid,也称为事务的四个测试(原子性,一致性,隔离性,持久性) automicity:原子性,事务所引起的数据库操作,要么都完成,要么都不执行 consisitency:一致性,事务执行前的总和和事务执行后的总和是不