MySQL 5.1 中,在复制方面的改进就是引进了新的复制技术:基于行的复制。

MYSQL复制的几种模式

MySQL 5.1 中,在复制方面的改进就是引进了新的复制技术:基于行的复制。

简言之,这种新技术就是关注表中发生变化的记录,而非以前的照抄 binlog 模式。

从 MySQL 5.1.12 开始,可以用以下三种模式来实现:

-- 基于SQL语句的复制(statement-based replication, SBR),

-- 基于行的复制(row-based replication, RBR),

-- 混合模式复制(mixed-based replication, MBR)。

相应地,binlog的格式也有三种:STATEMENT,ROW,MIXED。 MBR 模式中,SBR 模式是默认的。

在运行时可以动态低改变binlog的格式,除了以下几种情况:

. 存储过程或者触发器中间

. 启用了NDB

. 当前会话试用 RBR 模式,并且已打开了临时表

如果binlog采用了 MIXED 模式,那么在以下几种情况下会自动将binlog的模式由 SBR 模式改成 RBR 模式。

. 当DML语句更新一个NDB表时

. 当函数中包含 UUID() 时

. 2个及以上包含 AUTO_INCREMENT 字段的表被更新时

. 行任何 INSERT DELAYED 语句时

. 用 UDF 时

. 视图中必须要求使用 RBR 时,例如创建视图是使用了 UUID() 函数

设定主从复制模式的方法非常简单,只要在以前设定复制配置的基础上,再加一个参数:

binlog_format="STATEMENT"

#binlog_format="ROW"

#binlog_format="MIXED"

当然了,也可以在运行时动态修改binlog的格式。例如

mysql> SET SESSION binlog_format = 'STATEMENT';

mysql> SET SESSION binlog_format = 'ROW';

mysql> SET SESSION binlog_format = 'MIXED';

mysql> SET GLOBAL binlog_format = 'STATEMENT';

mysql> SET GLOBAL binlog_format = 'ROW';

mysql> SET GLOBAL binlog_format = 'MIXED';

两种模式各自的优缺点:

SBR 的优点:

历史悠久,技术成熟

binlog文件较小

binlog中包含了所有数据库更改信息,可以据此来审核数据库的安全等情况

binlog可以用于实时的还原,而不仅仅用于复制

主从版本可以不一样,从服务器版本可以比主服务器版本高

SBR 的缺点:

不是所有的UPDATE语句都能被复制,尤其是包含不确定操作的时候。

调用具有不确定因素的 UDF 时复制也可能出问题

使用以下函数的语句也无法被复制:

* LOAD_FILE()

* UUID()

* USER()

* FOUND_ROWS()

* SYSDATE() (除非启动时启用了 --sysdate-is-now 选项)

INSERT ... SELECT 会产生比 RBR 更多的行级锁

复制需要进行全表扫描(WHERE 语句中没有使用到索引)的 UPDATE 时,需要比 RBR 请求更多的行级锁

对于有 AUTO_INCREMENT 字段的 InnoDB表而言,INSERT 语句会阻塞其他 INSERT 语句

对于一些复杂的语句,在从服务器上的耗资源情况会更严重,而 RBR 模式下,只会对那个发生变化的记录产生影响

存储函数(不是存储过程)在被调用的同时也会执行一次 NOW() 函数,这个可以说是坏事也可能是好事

确定了的 UDF 也需要在从服务器上执行

数据表必须几乎和主服务器保持一致才行,否则可能会导致复制出错

执行复杂语句如果出错的话,会消耗更多资源

RBR 的优点:

任何情况都可以被复制,这对复制来说是最安全可靠的

和其他大多数数据库系统的复制技术一样

多数情况下,从服务器上的表如果有主键的话,复制就会快了很多

复制以下几种语句时的行锁更少:

* INSERT ... SELECT

* 包含 AUTO_INCREMENT 字段的 INSERT

* 没有附带条件或者并没有修改很多记录的 UPDATE 或 DELETE 语句

执行 INSERT,UPDATE,DELETE 语句时锁更少

从服务器上采用多线程来执行复制成为可能

RBR 的缺点:

binlog 大了很多

复杂的回滚时 binlog 中会包含大量的数据

主服务器上执行 UPDATE 语句时,所有发生变化的记录都会写到 binlog 中,而 SBR 只会写一次,这会导致频繁发生 binlog 的并发写问题

UDF 产生的大 BLOB 值会导致复制变慢

无法从 binlog 中看到都复制了写什么语句(加密过的)

当在非事务表上执行一段堆积的SQL语句时,最好采用 SBR 模式,否则很容易导致主从服务器的数据不一致情况发生

另外,针对系统库 mysql 里面的表发生变化时的处理规则如下:

如果是采用 INSERT,UPDATE,DELETE 直接操作表的情况,则日志格式根据 binlog_format 的设定而记录

如果是采用 GRANT,REVOKE,SET PASSWORD 等管理语句来做的话,那么无论如何都采用 SBR 模式记录

注:采用 RBR 模式后,能解决很多原先出现的主键重复问题。

实例:

对于insert into db_allot_ids select * from db_allot_ids 这个语句:

在BINLOG_FORMAT=STATEMENT 模式下:

BINLOG日志信息为:

-----------------------------------------

BEGIN

/*!*/;

# at 173

#090612 16:05:42 server id 1 end_log_pos 288 Query thread_id=4 exec_time=0 error_code=0

SET TIMESTAMP=1244793942/*!*/;

insert into db_allot_ids select * from db_allot_ids

/*!*/;

-----------------------------------------

在BINLOG_FORMAT=ROW 模式下:

BINLOG日志信息为:

-----------------------------------------

BINLOG '

hA0yShMBAAAAMwAAAOAAAAAAAA8AAAAAAAAAA1NOUwAMZGJfYWxsb3RfaWRzAAIBAwAA

hA0yShcBAAAANQAAABUBAAAQAA8AAAAAAAEAAv/8AQEAAAD8AQEAAAD8AQEAAAD8AQEAAAA=

'/*!*/;

-----------------------------------------

mysql的几种模式_MYSQL复制的几种模式相关推荐

  1. mysql复制模式有几种_MYSQL复制的几种模式

    MySQL 5.1 中,在复制方面的改进就是引进了新的复制技术:基于行的复制. MYSQL复制的几种模式 MySQL 5.1 中,在复制方面的改进就是引进了新的复制技术:基于行的复制. 简言之,这种新 ...

  2. mysql双主复制模式_mysql复制模式第二部分-----双主模式

    双主配置 我在配置主从服务器时,使用了两台服务器:10.19.34.126和10.19.34.91. 1.首先需要在这两台上搭建单独的mysql服务masterA和masterB. 2.配置数据库ma ...

  3. mysql日志是什么格式_Mysql日志的三种格式

    MySQL binlog格式 binlog的格式也有三种:STATEMENT.ROW.MIXED . 1.STATMENT模式: 基于SQL语句的复制(statement-based replicat ...

  4. mysql 5.7 严格模式_mysql 5.7中严格模式的问题

    在mysql 5.7中,默认使用的是严格模式,这个有的时候会太严格,带来问题, 比如: mysql> CREATE TABLE `events_t` ( -> `id` int(11) N ...

  5. mysql优化常见错误处理_MySQL复制性能优化和常见问题分析

    前言 先来说说影响MySQL复制性能的几个参数吧 二进制日志文件并不是每次写的时候都会同步到磁盘,当发生宕机的时候,可能会有最后一部分数据没有写入到binlog中,这给恢复和复制带来了问题.当sync ...

  6. mysql如何查看事务日记_MySQL中的几种日志了解

    前言 MySQL中有以下日志文件,分别是: 1:重做日志(redo log) 2:回滚日志(undo log) 3:二进制日志(binlog) 4:错误日志(errorlog) 5:慢查询日志(slo ...

  7. mysql的常用存储引擎_MySQL常见的三种存储引擎

    Ok,我们知道了,引擎就是一个程序的核心组件. 简单来说,存储引擎就是指表的类型以及表在计算机上的存储方式. 存储引擎的概念是MySQL的特点,Oracle中没有专门的存储引擎的概念,Oracle有O ...

  8. mysql三种引擎_MySQL常见的三种存储引擎

    原文连接:https://www.cnblogs.com/yuxiuyan/p/6511837.htmlhtml 简单来讲,存储引擎就是指表的类型以及表在计算机上的存储方式.数据库 存储引擎的概念是M ...

  9. mysql索引4种结构_mysql索引:四种类型,两种方法

    1. 普通索引:最基本的索引,它没有任何限制,用于加速查询. 2. 唯一索引unique:索引列的值必须唯一,但允许有空值.如果是组合索引,则列值的组合必须唯一. 3. 主键索引: 是一种特殊的唯一索 ...

最新文章

  1. 网络编程中的大端和小端
  2. 4分钟极速甩脂训练!抛开借口!繁忙族必备!
  3. AndFix解析——(上)
  4. html定义一个集合,HTML标签属性集合
  5. 北京内推 | 华为高斯实验室招聘AI算法工程师/实习生
  6. 史上最详细的XGBoost实战
  7. Linux 下的tar常用命令及操作
  8. js调用高德API获取所在当前城市
  9. 修改marathon源码后,如何编译,部署到集群中?
  10. pythonocc_链轮
  11. 数学图形之双曲抛物面
  12. java获取本机ip_java获取本机IP
  13. Android经典项目开发之天气APP实例分享
  14. CPU框架~ 什么是X86 ?~什么是ARM ? 华为鲲鹏云是什么?
  15. 姓舒男孩名字简单大气,帮你解决起名的烦恼!
  16. 故事要从我白嫖了一个阿里云服务器说起
  17. 【Java中继承总结与练习 】
  18. 五种蓝牙耳机,到底谁才是你的菜
  19. html table拓宽,excel拉长单元格_excel调整单元格大小的方法步骤详解
  20. HCIP-5.4OSPF路由聚合、缺省路由

热门文章

  1. html5.0笔记,动易sf5.0标签笔记.doc
  2. python做线性回归统计推断提取参数_概率分析方法与推断统计(来自我写的python书)...
  3. Redis Sentinel
  4. AARRR:互联网创业者一定要掌握的指标
  5. UVA 12904 Load Balancing 暴力
  6. MKNetworkKit 使用
  7. 基于Cmail的邮件收发限制说明
  8. Varnish Glossary(varnish术语)
  9. SUN:开源在Web2.0时代
  10. 采用动态解析设置***