MySQL复制模式的全面剖析

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

               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,如需转载请自行联系原作者
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
3月前
|
SQL Oracle 关系型数据库
MySQL的sql_mode模式说明及设置
MySQL的sql_mode模式说明及设置
602 112
|
6月前
|
存储 关系型数据库 MySQL
【赵渝强老师】OceanBase数据库从零开始:MySQL模式
《OceanBase数据库从零开始:MySQL模式》是一门包含11章的课程,涵盖OceanBase分布式数据库的核心内容。从体系架构、安装部署到租户管理、用户安全,再到数据库对象操作、事务与锁机制,以及应用程序开发、备份恢复、数据迁移等方面进行详细讲解。此外,还涉及连接路由管理和监控诊断等高级主题,帮助学员全面掌握OceanBase数据库的使用与管理。
355 5
|
9月前
|
关系型数据库 MySQL 数据库
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
随着数据量增长和业务扩展,单个数据库难以满足需求,需调整为集群模式以实现负载均衡和读写分离。MySQL主从复制是常见的高可用架构,通过binlog日志同步数据,确保主从数据一致性。本文详细介绍MySQL主从复制原理及配置步骤,包括一主二从集群的搭建过程,帮助读者实现稳定可靠的数据库高可用架构。
536 9
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
|
9月前
|
SQL 存储 关系型数据库
MySQL主从复制 —— 作用、原理、数据一致性,异步复制、半同步复制、组复制
MySQL主从复制 作用、原理—主库线程、I/O线程、SQL线程;主从同步要求,主从延迟原因及解决方案;数据一致性,异步复制、半同步复制、组复制
981 11
|
Prometheus 监控 关系型数据库
数据库同步革命:MySQL GTID模式下主从配置的全面解析
数据库同步革命:MySQL GTID模式下主从配置的全面解析
1484 0
|
存储 关系型数据库 MySQL
MySQL主从复制原理和使用
本文介绍了MySQL主从复制的基本概念、原理及其实现方法,详细讲解了一主两从的架构设计,以及三种常见的复制模式(全同步、异步、半同步)的特点与适用场景。此外,文章还提供了Spring Boot环境下配置主从复制的具体代码示例,包括数据源配置、上下文切换、路由实现及切面编程等内容,帮助读者理解如何在实际项目中实现数据库的读写分离。
1414 1
MySQL主从复制原理和使用
|
SQL 关系型数据库 MySQL
Mysql中搭建主从复制原理和配置
主从复制在数据库管理中广泛应用,主要优点包括提高性能、实现高可用性、数据备份及灾难恢复。通过读写分离、从服务器接管、实时备份和地理分布等机制,有效增强系统的稳定性和数据安全性。主从复制涉及I/O线程和SQL线程,前者负责日志传输,后者负责日志应用,确保数据同步。配置过程中需开启二进制日志、设置唯一服务器ID,并创建复制用户,通过CHANGE MASTER TO命令配置从服务器连接主服务器,实现数据同步。实验部分展示了如何在两台CentOS 7服务器上配置MySQL 5.7主从复制,包括关闭防火墙、配置静态IP、设置域名解析、配置主从服务器、启动复制及验证同步效果。
415 0
Mysql中搭建主从复制原理和配置
|
SQL 关系型数据库 MySQL
MySQL的match WITH QUERY EXPANSION 模式是什么?如何使用?
【8月更文挑战第29天】MySQL的match WITH QUERY EXPANSION 模式是什么?如何使用?
230 5
|
SQL 关系型数据库 MySQL
说一下MySQL主从复制的原理?
【8月更文挑战第24天】说一下MySQL主从复制的原理?
161 0
|
JSON 关系型数据库 MySQL
实时计算 Flink版产品使用问题之在使用CDAS语法同步MySQL数据到Hologres时,如果开启了字段类型宽容模式,MySQL中的JSON类型会被转换为什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。

推荐镜像

更多