Mysql不同主从格式(Replication Formats)的区别

2024-04-18 11:08

本文主要是介绍Mysql不同主从格式(Replication Formats)的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Mysql之所以可以实现主从服务器之间的同步,是因为主服务器端的事件(events)写到了 binary log 中,然后在从服务器上再次执行这些事件。

事件写入BINLOG中,主要有以下三种格式:

1、基于语句的记录(Statement-Based Replication)
就是将主服务器上执行的语句记录下来,在从服务器上再次执行一遍。在MYSQL 5.1.4之前,只有这一种方式;

这种类型的优点包括:

        A、从3.23版本以来,MYSQL只有这一种类型,所以这种类型已经被实践所证实;

       B、写入BINLOG的数据相对来说少一些,特别是更新很多行的语句,不用把每行的变化记录下来;

       C、所有更改数据库的语句都会被记录下来,可以用来监督数据库。

这种类型的缺点也很明显,是一种不“安全”的记录方式:

       A、不能更新不缺定地行;比如UPDATE语句中有不加ORDER的LIMIT;

       B、

LOAD_FILE()
UUID(), UUID_SHORT()
USER()
FOUND_ROWS()
SYSDATE() (unless both the master and the slave are started with the --sysdate-is-now option)
GET_LOCK()
IS_FREE_LOCK()
IS_USED_LOCK()
MASTER_POS_WAIT()
RAND()
RELEASE_LOCK()
SLEEP()
VERSION()

比如,使用SBR(STATEMENT-BASED REPLICATION)同步这条语句:

update table set column=uuid() limit 2
更新后,这两条记录主服务器端该字段的值为:

45734358-9df1-11e3-b0fd-782bcb74f37e

从服务器端的值:

3fa4171e-9df0-11e3-a0e5-782bcb74f37e

       C、比基于行的方式需要更多地行级锁;

2、基于行的记录(Row-Based Replication)

就是将主服务器上对每一行的修改记录下来,然后在从服务器上实现之;

这个类型的优势:

       A、是一种安全的方式,也就是说能够准确无误地同步主服务器的内容,比如上面那个例子使用RBR(ROW-BASED REPLICATION)的结果:

主服务器和从服务器端均为:

b290f3a0-9df5-11e3-b0fd-782bcb74f37e

       B、需要锁行的数量很少

这个类型的缺点就是:

       A、需要记录的内容太多,如果一条语句更新了一个几千万条数据的,那就会记录几千万条BINLOG……

       B、如果一些生成的变量很庞大,比如BLOB类型,会使得记录很庞大

       C、无法知道当前哪条语句在执行,无法监督主从进度

3、混合类型记录(Mixed-Based Replication)

就是上述两种都有,系统会实时选择合适的类型来记录主服务器的记录。


这篇关于Mysql不同主从格式(Replication Formats)的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/914612

相关文章

SQL Server 中的表进行行转列场景示例

《SQLServer中的表进行行转列场景示例》本文详细介绍了SQLServer行转列(Pivot)的三种常用写法,包括固定列名、条件聚合和动态列名,文章还提供了实际示例、动态列数处理、性能优化建议... 目录一、常见场景示例二、写法 1:PIVOT(固定列名)三、写法 2:条件聚合(CASE WHEN)四、

Mybatis对MySQL if 函数的不支持问题解读

《Mybatis对MySQLif函数的不支持问题解读》接手项目后,为了实现多租户功能,引入了Mybatis-plus,发现之前运行正常的SQL语句报错,原因是Mybatis不支持MySQL的if函... 目录MyBATis对mysql if 函数的不支持问题描述经过查询网上搜索资料找到原因解决方案总结Myb

MySQL 筛选条件放 ON后 vs 放 WHERE 后的区别解析

《MySQL筛选条件放ON后vs放WHERE后的区别解析》文章解释了在MySQL中,将筛选条件放在ON和WHERE中的区别,文章通过几个场景说明了ON和WHERE的区别,并总结了ON用于关... 今天我们来讲讲数据库筛选条件放 ON 后和放 WHERE 后的区别。ON 决定如何 "连接" 表,WHERE

mysql_mcp_server部署及应用实践案例

《mysql_mcp_server部署及应用实践案例》文章介绍了在CentOS7.5环境下部署MySQL_mcp_server的步骤,包括服务安装、配置和启动,还提供了一个基于Dify工作流的应用案例... 目录mysql_mcp_server部署及应用案例1. 服务安装1.1. 下载源码1.2. 创建独立

Mysql中RelayLog中继日志的使用

《Mysql中RelayLog中继日志的使用》MySQLRelayLog中继日志是主从复制架构中的核心组件,负责将从主库获取的Binlog事件暂存并应用到从库,本文就来详细的介绍一下RelayLog中... 目录一、什么是 Relay Log(中继日志)二、Relay Log 的工作流程三、Relay Lo

MySQL日志UndoLog的作用

《MySQL日志UndoLog的作用》UndoLog是InnoDB用于事务回滚和MVCC的重要机制,本文主要介绍了MySQL日志UndoLog的作用,文中介绍的非常详细,对大家的学习或者工作具有一定的... 目录一、Undo Log 的作用二、Undo Log 的分类三、Undo Log 的存储四、Undo

MySQL游标和触发器的操作流程

《MySQL游标和触发器的操作流程》本文介绍了MySQL中的游标和触发器的使用方法,游标可以对查询结果集进行逐行处理,而触发器则可以在数据表发生更改时自动执行预定义的操作,感兴趣的朋友跟随小编一起看看... 目录游标游标的操作流程1. 定义游标2.打开游标3.利用游标检索数据4.关闭游标例题触发器触发器的基

Mybatis的mapper文件中#和$的区别示例解析

《Mybatis的mapper文件中#和$的区别示例解析》MyBatis的mapper文件中,#{}和${}是两种参数占位符,核心差异在于参数解析方式、SQL注入风险、适用场景,以下从底层原理、使用场... 目录MyBATis 中 mapper 文件里 #{} 与 ${} 的核心区别一、核心区别对比表二、底

MySQL查看表的历史SQL的几种实现方法

《MySQL查看表的历史SQL的几种实现方法》:本文主要介绍多种查看MySQL表历史SQL的方法,包括通用查询日志、慢查询日志、performance_schema、binlog、第三方工具等,并... 目录mysql 查看某张表的历史SQL1.查看MySQL通用查询日志(需提前开启)2.查看慢查询日志3.

MySQL底层文件的查看和修改方法

《MySQL底层文件的查看和修改方法》MySQL底层文件分为文本类(可安全查看/修改)和二进制类(禁止手动操作),以下按「查看方法、修改方法、风险管控三部分详细说明,所有操作均以Linux环境为例,需... 目录引言一、mysql 底层文件的查看方法1. 先定位核心文件路径(基础前提)2. 文本类文件(可直