Advantages of statement-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)的优缺点的更多相关文章

  1. MySQL binlog_format (Mixed,Statement,Row)[转]

    MySQL 5.5 中对于二进制日志 (binlog) 有 3 种不同的格式可选:Mixed,Statement,Row,默认格式是 Statement.总结一下这三种格式日志的优缺点. MySQL ...

  2. [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 ...

  3. MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述

    MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述: 1.MySQL有多种存储引擎: MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB(Berk ...

  4. 在JDBC中使用PreparedStatement代替Statement,同时预防SQL注入

    本篇讲诉为何在JDBC操作数据库的过程中,要使用PreparedStatement对象来代替Statement对象. 在前面的JDBC学习中,对于Statement对象,我们已经知道是封装SQL语句并 ...

  5. 用JDBC把Excel中的数据导入到Mysql数据库中

    步骤:0.在Mysql数据库中先建好table 1.从Excel表格读数据 2.用JDBC连接Mysql数据库 3.把读出的数据导入到Mysql数据库的相应表中 其中,步骤0的table我是先在Mys ...

  6. 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 ...

  7. 通过JSP网页连接MySQL数据库,从MySQL数据库中读出一张表并显示在JSP网页中

    1.安装所需软件 ①安装java和tomcat,建立JSP网页最基础的软件②安装MySQL数据库(下载地址:https://www.mysql.com/)③安装Navicat Premium来查看数据 ...

  8. 【转】[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 ...

  9. 使用sqoop将MySQL数据库中的数据导入Hbase

    使用sqoop将MySQL数据库中的数据导入Hbase 前提:安装好 sqoop.hbase. 下载jbdc驱动:mysql-connector-java-5.1.10.jar 将 mysql-con ...

随机推荐

  1. 微信小程序页面跳转,带参数跳转

    1.  wx.navigateTo  (保留当前页面,跳转到应用内的某个页面,使用wx.navigateBack可以返回到原页面.) 路径:只能跳转非tabbar路径 参数:  'path?key=v ...

  2. SQL注入之Sqli-labs系列第四十一关(基于堆叠注入的盲注)和四十二关四十三关四十四关四十五关

    0x1普通测试方式 (1)输入and1=1和and1=2测试,返回错误,证明存在注入 (2)union select联合查询 (3)查询表名 (4)其他 payload: ,( ,( 0x2 堆叠注入 ...

  3. linux执行python的脚本文件,提示提示No such file or directory

    在window平台下,写好python脚本文件,迁移到linux平台,赋过可执行权限,执行该sh文件,却提示No such file or directory.ls 了下,确实有该文件,怎么会事呢, ...

  4. ansible常用模块用法

    ansible常用模块用法 2015-07-21 10:25 24458人阅读 评论(1) 收藏 举报  分类: Linux(44)   ansible 版权声明:本文为博主原创文章,未经博主允许不得 ...

  5. invalid context 0x0.

    在展示图片或者做二维码的时候,若是宽或者高有一个为零的情况就会报错:CGBitmapContextCreateImage: invalid context 0x0. If you want to se ...

  6. Netty 基本组件与线程模型

    Netty 的学习内容主要是围绕 TCP 和 Java NIO 这两个点展开的,由于 Netty 是基于 Java NIO 的 API 之上构建的网络通讯框架,Java NIO 中的几个组件,都能在 ...

  7. Linux 安装aria2

    Ubuntu/Linux Mint/Debian sudo apt-get install aria2 CentOS/Fedora sudo yum install aria2 Manjaro/Arc ...

  8. redis的LRU算法(二)

    前文再续,书接上一回.上次讲到redis的LRU算法,文章实在精妙,最近可能有机会用到其中的技巧,顺便将下半部翻译出来,实现的时候参考下. 搏击俱乐部的第一法则:用裸眼观测你的算法 Redis2.8的 ...

  9. SQLalchemy 字段类型

    常用的SQLAlchemy列选项 类型名 python中类型 说明 Integer int 普通整数,一般是32位 SmallInteger int 取值范围小的整数,一般是16位 BigIntege ...

  10. eclipse启动tomcat错误解决

    clipse启动tomcat报出下面的错误提示: 控制台: 九月 06, 2018 9:01:31 下午 org.apache.tomcat.util.digester.SetPropertiesRu ...