MySQL复制模式的全面剖析

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

               MySQL Replication  Format

1:MySQL支持的复制的模式:

1
2
3
基于语句的复制(statement-based replication,简称:SBR)
基于行的复制(row-based replication, 简称:RBR)
基于混合模式的复制(mixed-based replication, 简称:MBR)

2:三种模式的简单定义:

  基于语句的复制:就是从库(slave)基于产生变化的SQL语句从主库(master)进行复制。在MySQL5.1.4版本之前是binlog和复制唯一支持的模式,也是MySQL5.5中默认的格式。

  基于行的复制:基于行的复制不复制SQL语句,而是将插入,删除或更新操作的各行进行复制。master的binlog记录的是各个表中行的变化。

  基于混合模式的复制:它是根据事件的类型实时的改变binlog的格式。当设置为混合模式时,默认为基于语句的格式,但在特定的情况下它会自动的转变为基于行的模式。

3:基于语句的复制和基于行的复制的优缺点:

  1):基于语句的复制的优点

  .久经考验,或者说是很成熟的技术,从MySQL3.23版本已经开始支持。

  .更少的数据需要写入binlog文件中;当update,insert或者delete影响很多行时,它会占用很少的存储空间,同样也意味着当从备份中恢复会更快。

  .由于binlog文件记录了所有可能导致变化的语句,所以可以用它来审计数据库。

  2):基于语句的复制的缺点

    .基于语句的复制的语句,数据是不安全的。不是所有可能修改数据的语句都可以通过基于语句的复制而进行安全,无误差的复制。一些不确定的因素或者说行为导致很难通过基于语句进行复制。例如,一些DML语句:

    .如果语句含有UDF的调用或stored programs(stored procedures and functions,triggers and events)的调用,则无法保证slave上使用的是相同的值。由于返回的值不能保证仅仅是跟函数或存储程序的参数有关系。关于此部分请参考:http://dev.mysql.com/doc/refman/5.5/en/replication-features-invoked.html

    .如果update,delete或insert语句包含limit从句,则执行期间的数据库崩溃可能带来问题。由于受影响行的顺序没有定义。

    .如果语句含有任何不确定的函数调用,则可能会导致Master与Slave之间产生不一致的情况。这些函数有:

    LOAD_FILE(filename)  :读取文件,以字符串的形式返回值。

    UUID()             :生成唯一值的函数,128位。

    UUID_SHORT()        :同UUID(),64位。

    USER()             :以utf8字符集返回当前连接MySQL的用户名及主机名。

    FOUND_ROWS()        :返回一个包含limit字句获得的查询总数。

    SYSDATE()          :返回动态执行的时间。

    GET_LOCK(str,timeout) :获得一个以字符串命名的锁,且有超时时间。

    IS_USED_LOCK(str)    :检测str命名的锁是否在使用中。

    IS_FREE_LOCK(str)    :检测str命名的锁是否没在使用。

    MASTER_POS_WAIT()    :控制master/slave的同步。

    RAND()             :实现随机数的方法。

    RELEASE_LOCK()       :用来释放因GET_LOCK()获取锁的str。

    SLEEP()            :实现延迟动作的时间的方法。

    VERSION()           :返回MySQL版本信息的函数。

特别说明:

关于sysdate(),如果master,salve启动时加上--sysdate-is-now 参数,就不会影响复制了。

    .Insert ..... Select语句当其需要大量的行级锁时。

    .Update语句当其进行全表扫描时(由于没有索引或者合适的索引)。

    .For InnoDB,一个带有AUTO_INCREMENT的Insert语句。

    .对于很复杂的语句,当在Slave上执行前还需进行解析,优化。而基于行模式,仅仅是修改影响的行

    .Master,Slave表结构必须几乎一样。

    .如果在从库上执行复杂的语句出现了错误,很可能将影响到Slave上改变的行数。

   3):基于行复制的优点

    .所有的改变都可复制,这是最安全的复制模式。

    .基于行复制的实现的技术和其它大多数的数据库是一样的,了解了其它的数据库系统,就相当于了解了它的实现。

    .在Master上需要的行锁会很少,从而获得更高的并发性,如下几种语句:

      . Insert ...... Select

      . 带有AUTO_INCREMENT字段的Insert。

      . 带有Where子句且没有使用索引或改变很少满足条件的Update或delete语句。

    .Slave上执行Insert,Update,Delete语句时锁更少了。

   4):基于行复制的缺点

    .binlog需记录更多的数据,意味着从备份中回滚时需要更多的时间;此外如果遇到改变很多行时,所有改变都会写入binlog中,而基于语句的复制只会写一次,这会导致频繁发生binlog的并发写问题

    .UDFs产生的大的BLOB值会导致复制变慢。

    .不能够从binlog中看到执行过具体那些语句,同样也不能够查看Slave正在执行那些从Master上得到的语句。

    .对MyISAM表并发插入时,不支持基于行的模式。

特别说明:

  基于行复制,如果想看binlog那些数据改变了,使用mysqlbinlog加上--base64-output=DECODE-ROWS 和--verbose参数。

4:基于语句,基于行的复制的选择性

  .语句是否更新大量的行,还是通常只改变或插入少量行?

   如果语句改变大量的行,基于语句的复制执行更快。但是由于语句也在Slave上执行,所以并不总是这

   样。如果语句的优化和执行计划很复杂,这时可能基于行的复制,因为寻找行的逻辑快的多。

   如果语句只改变或插入少量行,则基于行的复制更快,因为不需要解析,所有的处理都直接交给存储

   引擎。

  .是否需要知道执行了那些语句?至少可以说,基于行的复制的事件处理很难解码。而基于语句的复制,

   被写入二进制日志中,因此可以直接读取。

  .基于语句的复制的复制模型很简单:只要在Slave上执行相同的语句即可。这种技术应用已久,很多

   DBA对其熟悉。而基于行的复制相对较新,如果复制过程出现故障,可能难以解决。

  .如果Master和Slave上数据不同,执行语句的结果也会不同。有时是故意的(这时应该使用基于语句的

   复制),但有时是无意的,可以通过基于行的复制来避免这一情况。

5:基于混合模式的复制

   混合模式复制背后的原理很简单:正常情况下使用基于语句的复制,对于不安全的语句切换为基于行的复制。当出现以下情况时,混合模式需要切换到基于行的复制:

   .该语句调用了:

    UUID函数;

    用户自定义函数(UDFs);

    CURRENT_USER 或USER函数;

    LOAD_FILE函数。

   .同一个语句更改了两张或更多包含AUTO_INCREMENT列的表。

   .语句中使用了服务器变量。

   .存储引擎不允许使用基于语句复制,如:MySQL Cluster引擎。

6:关于binlog_format的简介

1
2
3
4
Variable Name            binlog_format
Variable Scope           Global,Session
Dynamic  Variable        Yes
Permitted Values         STATEMENT,ROW,MIXED

特别注意:

   你可以在一个正在运行MySQL实例改变binlog的格式,但是并不推荐你在一个正在运行的主从框架中修改它的值。因为主库的修改,并不能影响从库的日志格式,只有从库自己才可以改变自己的日志格式。










本文转自 kuchuli 51CTO博客,原文链接:http://blog.51cto.com/lgdvsehome/1226339,如需转载请自行联系原作者
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
存储 关系型数据库 MySQL
MySQL主从复制原理和使用
本文介绍了MySQL主从复制的基本概念、原理及其实现方法,详细讲解了一主两从的架构设计,以及三种常见的复制模式(全同步、异步、半同步)的特点与适用场景。此外,文章还提供了Spring Boot环境下配置主从复制的具体代码示例,包括数据源配置、上下文切换、路由实现及切面编程等内容,帮助读者理解如何在实际项目中实现数据库的读写分离。
111 1
MySQL主从复制原理和使用
|
2月前
|
SQL 关系型数据库 MySQL
Mysql中搭建主从复制原理和配置
主从复制在数据库管理中广泛应用,主要优点包括提高性能、实现高可用性、数据备份及灾难恢复。通过读写分离、从服务器接管、实时备份和地理分布等机制,有效增强系统的稳定性和数据安全性。主从复制涉及I/O线程和SQL线程,前者负责日志传输,后者负责日志应用,确保数据同步。配置过程中需开启二进制日志、设置唯一服务器ID,并创建复制用户,通过CHANGE MASTER TO命令配置从服务器连接主服务器,实现数据同步。实验部分展示了如何在两台CentOS 7服务器上配置MySQL 5.7主从复制,包括关闭防火墙、配置静态IP、设置域名解析、配置主从服务器、启动复制及验证同步效果。
Mysql中搭建主从复制原理和配置
|
6月前
|
Prometheus 监控 关系型数据库
数据库同步革命:MySQL GTID模式下主从配置的全面解析
数据库同步革命:MySQL GTID模式下主从配置的全面解析
743 0
|
4月前
|
SQL 关系型数据库 MySQL
MySQL的match WITH QUERY EXPANSION 模式是什么?如何使用?
【8月更文挑战第29天】MySQL的match WITH QUERY EXPANSION 模式是什么?如何使用?
69 4
|
4月前
|
SQL 关系型数据库 MySQL
说一下MySQL主从复制的原理?
【8月更文挑战第24天】说一下MySQL主从复制的原理?
65 0
|
4月前
|
SQL canal 关系型数据库
(二十四)全解MySQL之主从篇:死磕主从复制中数据同步原理与优化
兜兜转转,经过《全解MySQL专栏》前面二十多篇的内容讲解后,基本对MySQL单机模式下的各方面进阶知识做了详细阐述,同时在前面的《分库分表概念篇》、《分库分表隐患篇》两章中也首次提到了数据库的一些高可用方案,但前两章大多属于方法论,并未涵盖真正的实操过程。接下来的内容,会以目前这章作为分割点,开启MySQL高可用方案的落地实践分享的新章程!
2118 1
|
5月前
|
分布式计算 DataWorks 关系型数据库
MaxCompute操作报错合集之配置mysql数据源querysql模式,同步到MC时遇到报错,该怎么处理
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
6月前
|
JSON 关系型数据库 MySQL
实时计算 Flink版产品使用问题之在使用CDAS语法同步MySQL数据到Hologres时,如果开启了字段类型宽容模式,MySQL中的JSON类型会被转换为什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6月前
|
分布式计算 DataWorks 关系型数据库
DataWorks操作报错合集之数据源同步时,使用脚本模式采集mysql数据到odps中,使用querySql方式采集数据,在脚本中删除了Reader中的column,但是datax还是报错OriginalConfPretreatmentUtil - 您的配置有误。如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
7月前
|
传感器 人工智能 前端开发
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
智慧校园电子班牌,坐落于班级的门口,适合于各类型学校的场景应用,班级学校日常内容更新可由班级自行管理,也可由学校统一管理。让我们一起看看,电子班牌有哪些功能呢?
560 4
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式

推荐镜像

更多
下一篇
DataWorks