MySQL binlog_format中sbr 和rbr(Statement-Based and Row-Based Replication)的优缺点
1 技术成熟 2 对于大量的更新删除等操作,仅仅会写入少量的变更结果,加速日志获取或者备份的速度 3 日志文件包含了所有更改的语句,可以用来做验证数据库
Disadvantages of statement-based replication
1.1 在UDF自定义函数中的语句
1.2 在DELETE和UPATE中没有使用order by 进行限制的字句
1.3 以下函数不能在语句格式中进行复制 load_file() uuid() user() found_rows() 等,now()函数除外
1.4 相比行格式,insert ...select 需要更多的行级锁
1.5 相比行格式,update语句需要锁住大量的行来进行表扫描
1.6 对于InnoDB:使用AUTO_INCREMENT会阻塞其他不冲突的INSERT语句(这里大概是因为自增都是通过同一个锁来控制的,所以会阻塞叼其他insert语句)
1.7 在复杂的语句中,行被更新或者插入之前,在从服务器上会对语句进行评估和执行。如果是行复制,从服务器只需要更改受影响的行而不需要去处理所有的表
1.8 在从库执行复杂语句中,由于评估错误,随着时间的超时,会对行的影响慢慢增多
1.9 存储函数使用跟调用函数相同的now()时候,并不是存储过程真实的情况
2.1 确定性UDF必须应用在从属上。
2.2 主和从的表的定义必须要一致
Advantages of row-based replication
1 所有的更改都可以被复制,是一种安全的复制
2 对于主库而言只有少量的行锁,从而实现较高的并发性
2.1 insert ...select
2.2 带有auto_increment的insert语句
2.3 对于update或delete语句,使用where字句不使用键或者不会更改大多数已经检查的行
2.4 在从库中任意使用insert ,update或delete语句只需要少量的行锁
Disadvantages of row-based replication
1 RBR格式在日志中会昌盛更多的数据记录,复制DML语句,语句格式仅仅是记录这条语句到二进制日志,二航个事,
将每行的改变记录进去,如果更改的行数越多,就会产生的数据写入到二进制日志则越多,这样的话可以使回滚
成为现实。由于记录每行的变更,锁住的时间将会更长,从而会引起并发的性能问题。可以使用binlog_row_image=minimal
来减少这个并发问题
2 确定性的UDF函数在基于航个事的复制情况下会产生大量的BLOB值从而是复制的时间变成。
3 你不能在从库上查看从主库传输过来的的语句,但是你可以通过mysqlbinlog带上--base64-output=decode-rows 和--verbose参数来查看改变的数据
4 对于使用MyISAM存储引擎的表,在将INSERT语句作为基于行的事件应用于二进制日志时,在将INSERT语句应用于语句时需要更强的锁定。
这意味着在使用基于行的复制时不支持MyISAM表上的并发插入。
以上为语句格式和行格式方面的优缺点,基于目前的复制和各个中间件的使用情况看,所有的数据库,都建议采用RBR的格式,而在5.7.7之后的版本,RBR也变成了默认的格式来支持生产的需求
MySQL binlog_format中sbr 和rbr(Statement-Based and Row-Based Replication)的优缺点的更多相关文章
- MySQL binlog_format (Mixed,Statement,Row)[转]
MySQL 5.5 中对于二进制日志 (binlog) 有 3 种不同的格式可选:Mixed,Statement,Row,默认格式是 Statement.总结一下这三种格式日志的优缺点. MySQL ...
- [MySQL复制异常]'Cannot execute statement: impossible to write to binary log since statement is in row format and BINLOG_FORMAT = STATEMENT.'
MySQL复制错误]Last_Errno: 1666 Last_Error: Error executing row event: 'Cannot execute statement: imposs ...
- MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述
MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述: 1.MySQL有多种存储引擎: MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB(Berk ...
- 在JDBC中使用PreparedStatement代替Statement,同时预防SQL注入
本篇讲诉为何在JDBC操作数据库的过程中,要使用PreparedStatement对象来代替Statement对象. 在前面的JDBC学习中,对于Statement对象,我们已经知道是封装SQL语句并 ...
- 用JDBC把Excel中的数据导入到Mysql数据库中
步骤:0.在Mysql数据库中先建好table 1.从Excel表格读数据 2.用JDBC连接Mysql数据库 3.把读出的数据导入到Mysql数据库的相应表中 其中,步骤0的table我是先在Mys ...
- ERROR 1666 (HY000): Cannot execute statement: impossible to write to binary log since statement is in row format and BINLOG_FORMAT = STATEMENT.
centos7.5 binlog恢复数据失败 问题: mysql> \. /tmp/inc.sql ERROR 1050 (42S01): Table 'new_1' already exist ...
- 通过JSP网页连接MySQL数据库,从MySQL数据库中读出一张表并显示在JSP网页中
1.安装所需软件 ①安装java和tomcat,建立JSP网页最基础的软件②安装MySQL数据库(下载地址:https://www.mysql.com/)③安装Navicat Premium来查看数据 ...
- 【转】[MySQL复制异常]Cannot execute statement: impossible to write to binary log since statement is in row for
MySQL复制错误]Last_Errno: 1666 Last_Error: Error executing row event: 'Cannot execute statement: imposs ...
- 使用sqoop将MySQL数据库中的数据导入Hbase
使用sqoop将MySQL数据库中的数据导入Hbase 前提:安装好 sqoop.hbase. 下载jbdc驱动:mysql-connector-java-5.1.10.jar 将 mysql-con ...
随机推荐
- 微信小程序页面跳转,带参数跳转
1. wx.navigateTo (保留当前页面,跳转到应用内的某个页面,使用wx.navigateBack可以返回到原页面.) 路径:只能跳转非tabbar路径 参数: 'path?key=v ...
- SQL注入之Sqli-labs系列第四十一关(基于堆叠注入的盲注)和四十二关四十三关四十四关四十五关
0x1普通测试方式 (1)输入and1=1和and1=2测试,返回错误,证明存在注入 (2)union select联合查询 (3)查询表名 (4)其他 payload: ,( ,( 0x2 堆叠注入 ...
- linux执行python的脚本文件,提示提示No such file or directory
在window平台下,写好python脚本文件,迁移到linux平台,赋过可执行权限,执行该sh文件,却提示No such file or directory.ls 了下,确实有该文件,怎么会事呢, ...
- ansible常用模块用法
ansible常用模块用法 2015-07-21 10:25 24458人阅读 评论(1) 收藏 举报 分类: Linux(44) ansible 版权声明:本文为博主原创文章,未经博主允许不得 ...
- invalid context 0x0.
在展示图片或者做二维码的时候,若是宽或者高有一个为零的情况就会报错:CGBitmapContextCreateImage: invalid context 0x0. If you want to se ...
- Netty 基本组件与线程模型
Netty 的学习内容主要是围绕 TCP 和 Java NIO 这两个点展开的,由于 Netty 是基于 Java NIO 的 API 之上构建的网络通讯框架,Java NIO 中的几个组件,都能在 ...
- Linux 安装aria2
Ubuntu/Linux Mint/Debian sudo apt-get install aria2 CentOS/Fedora sudo yum install aria2 Manjaro/Arc ...
- redis的LRU算法(二)
前文再续,书接上一回.上次讲到redis的LRU算法,文章实在精妙,最近可能有机会用到其中的技巧,顺便将下半部翻译出来,实现的时候参考下. 搏击俱乐部的第一法则:用裸眼观测你的算法 Redis2.8的 ...
- SQLalchemy 字段类型
常用的SQLAlchemy列选项 类型名 python中类型 说明 Integer int 普通整数,一般是32位 SmallInteger int 取值范围小的整数,一般是16位 BigIntege ...
- eclipse启动tomcat错误解决
clipse启动tomcat报出下面的错误提示: 控制台: 九月 06, 2018 9:01:31 下午 org.apache.tomcat.util.digester.SetPropertiesRu ...