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. JSF的分析

    一.JSF的有关定义 JavaServer Faces (JSF) 是一种用于构建Java Web 应用程序的标准框架 它提供了一种以组件为中心来开发 Java Web 用户界面的方法,从而简化了开发 ...

  2. 查看window系统电脑连接过的wifi密码

    电脑连接过的wifi都会有痕迹,包括SSID号和密码等信息,借此可以回查wifi密码信息. 步骤: 1.开始----运行----输入cmd 2.在dos窗口输入以下代码: “for /f " ...

  3. DG Switch over

    DG切换迁移Switch over切换文档 本篇文档,整体结构:1.切换前检查确认2.DG切换角色操作3.切换后检查确认 目录:一.切换前检查确认1.数据库版本2.DG架构,IP信息及切换角色前后3. ...

  4. Docker CE安装

    #添加账户docker useradd docker passwd docker (密码docker) #设置sudo权限 visudo root ALL=(ALL) ALL 后添加一行: docke ...

  5. leetcode 687.Longest Univalue Path

    寻找最长的路径,那么会在左边或者右边或者是从左到跟然后再到右方的路径的. /** * Definition for a binary tree node. * struct TreeNode { * ...

  6. Mysql存储

    BEGIN # 统计视频使用的模板数 UPDATE VideoTemplate vt INNER JOIN ( SELECT TemplateId, COUNT(TemplateId) AS Tota ...

  7. 利用位运算进行a+b的计算(Java&&Python)

    题目链接 需要用到的位运算操作:异或(^).与(&).右移(<<) 异或运算:又称不进位加法,a^b得到的结果为a与b相加,但是需要进位的地方不进位得到的结果 与运算:找出来a和b ...

  8. 20164322韩玉婷 -----EXP3 免杀原理与实践

    基础问题回答 1.杀软是如何检测出恶意代码的? (1)基于特征码的检测 特征码是能识别一个程序是一个病毒的一段不大于64字节的特征串.如果一个可执行文件包含这样的特征码则被杀毒软件检测为是恶意代码. ...

  9. html5 知识点简单总结03

    table表格 ----基本结构 table默认无边框(border) <table border="数值"> <tr> <th>表头</ ...

  10. display inline or block

    一.首先要了解什么是块级元素与行级元素 块级元素 会占领页面的一行,其后多个block元素自动换行. 可以设置width,height,设置了width后同样也占领一行.同样也可以设置   margi ...